Guest User

Untitled

a guest
Mar 2nd, 2015
335
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 2.13 KB | None | 0 0
  1. IF object_id('fn_MountainsPeaksJSON') IS NOT NULL
  2. BEGIN
  3.     PRINT 'Dropping function'
  4.     DROP FUNCTION fn_MountainsPeaksJSON
  5.     IF @@ERROR = 0 PRINT 'Function dropped'
  6. END
  7. GO
  8.  
  9. CREATE FUNCTION fn_MountainsPeaksJSON  ()
  10. RETURNS  VARCHAR(MAX)
  11. BEGIN
  12.    DECLARE mountains CURSOR FOR
  13.     SELECT dbo.Mountains.MountainRange, dbo.Mountains.Id
  14.     FROM Mountains
  15.  
  16.  
  17.     OPEN mountains;
  18.     DECLARE @mountainRange VARCHAR(50), @mountainId INT, @JSONString VARCHAR(MAX);
  19.     SET @JSONString = '{"mountains":[';
  20.  
  21.     FETCH NEXT FROM mountains INTO @mountainRange, @mountainId
  22.     WHILE @@FETCH_STATUS = 0
  23.     BEGIN
  24.        DECLARE @PartJSONString VARCHAR(MAX) = '{"name":"' + @mountainRange + '"';
  25.        
  26.        DECLARE peaks CURSOR FOR
  27.        SELECT dbo.Peaks.PeakName, dbo.Peaks.Elevation
  28.        FROM Peaks
  29.        WHERE dbo.Peaks.MountainId = @mountainId
  30.        ORDER BY dbo.Peaks.Id ASC
  31.            
  32.        OPEN peaks;
  33.        DECLARE @peaksJSONString VARCHAR(MAX) = NULL, @peakName VARCHAR(50), @peakElevation INT;
  34.  
  35.        FETCH NEXT FROM peaks INTO @peakName, @peakElevation;
  36.  
  37.        WHILE @@FETCH_STATUS = 0
  38.        BEGIN
  39.           IF @peaksJSONString IS NULL
  40.           BEGIN
  41.              SET @peaksJSONString = ',"peaks":[' + '{"name":"' + @peakName + '","elevation":' + CAST(@peakElevation AS VARCHAR) + '}'
  42.           END
  43.           ELSE
  44.           BEGIN
  45.           SET @peaksJSONString = @peaksJSONString + ',{"name":"' + @peakName + '","elevation":' + CAST(@peakElevation AS VARCHAR) + '}';
  46.           END
  47.           FETCH NEXT FROM peaks INTO @peakName, @peakElevation;
  48.        END;
  49.  
  50.        CLOSE peaks;
  51.        DEALLOCATE peaks;
  52.        
  53.        IF @peaksJSONString IS NOT NULL
  54.        BEGIN
  55.           SET @peaksJSONString = @peaksJSONString + ']';
  56.           SET @PartJSONString = @PartJSONString  + @peaksJSONString;
  57.        END
  58.        ELSE
  59.        BEGIN
  60.           SET @PartJSONString = @PartJSONString + ',"peaks":[]'
  61.        END
  62.  
  63.        SET @PartJSONString = @PartJSONString + '}'
  64.        
  65.        SET @JSONString = @JSONString + @PartJSONString + ',';
  66.        FETCH NEXT FROM mountains INTO @mountainRange, @mountainId
  67.     END;
  68.  
  69.     CLOSE mountains;
  70.     DEALLOCATE mountains;
  71.  
  72.     RETURN LEFT(@JSONString, LEN(@JSONString) -1) + ']}'
  73. END;
  74.    
  75. SELECT  dbo.fn_MountainsPeaksJSON ()
Advertisement
Add Comment
Please, Sign In to add comment