Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- IF object_id('fn_MountainsPeaksJSON') IS NOT NULL
- BEGIN
- PRINT 'Dropping function'
- DROP FUNCTION fn_MountainsPeaksJSON
- IF @@ERROR = 0 PRINT 'Function dropped'
- END
- GO
- CREATE FUNCTION fn_MountainsPeaksJSON ()
- RETURNS VARCHAR(MAX)
- BEGIN
- DECLARE mountains CURSOR FOR
- SELECT dbo.Mountains.MountainRange, dbo.Mountains.Id
- FROM Mountains
- OPEN mountains;
- DECLARE @mountainRange VARCHAR(50), @mountainId INT, @JSONString VARCHAR(MAX);
- SET @JSONString = '{"mountains":[';
- FETCH NEXT FROM mountains INTO @mountainRange, @mountainId
- WHILE @@FETCH_STATUS = 0
- BEGIN
- DECLARE @PartJSONString VARCHAR(MAX) = '{"name":"' + @mountainRange + '"';
- DECLARE peaks CURSOR FOR
- SELECT dbo.Peaks.PeakName, dbo.Peaks.Elevation
- FROM Peaks
- WHERE dbo.Peaks.MountainId = @mountainId
- ORDER BY dbo.Peaks.Id ASC
- OPEN peaks;
- DECLARE @peaksJSONString VARCHAR(MAX) = NULL, @peakName VARCHAR(50), @peakElevation INT;
- FETCH NEXT FROM peaks INTO @peakName, @peakElevation;
- WHILE @@FETCH_STATUS = 0
- BEGIN
- IF @peaksJSONString IS NULL
- BEGIN
- SET @peaksJSONString = ',"peaks":[' + '{"name":"' + @peakName + '","elevation":' + CAST(@peakElevation AS VARCHAR) + '}'
- END
- ELSE
- BEGIN
- SET @peaksJSONString = @peaksJSONString + ',{"name":"' + @peakName + '","elevation":' + CAST(@peakElevation AS VARCHAR) + '}';
- END
- FETCH NEXT FROM peaks INTO @peakName, @peakElevation;
- END;
- CLOSE peaks;
- DEALLOCATE peaks;
- IF @peaksJSONString IS NOT NULL
- BEGIN
- SET @peaksJSONString = @peaksJSONString + ']';
- SET @PartJSONString = @PartJSONString + @peaksJSONString;
- END
- ELSE
- BEGIN
- SET @PartJSONString = @PartJSONString + ',"peaks":[]'
- END
- SET @PartJSONString = @PartJSONString + '}'
- SET @JSONString = @JSONString + @PartJSONString + ',';
- FETCH NEXT FROM mountains INTO @mountainRange, @mountainId
- END;
- CLOSE mountains;
- DEALLOCATE mountains;
- RETURN LEFT(@JSONString, LEN(@JSONString) -1) + ']}'
- END;
- SELECT dbo.fn_MountainsPeaksJSON ()
Advertisement
Add Comment
Please, Sign In to add comment