Last active
October 2, 2017 23:12
-
-
Save jrodev/17d8ece4dff5a41aad7cbb31094fa19c to your computer and use it in GitHub Desktop.
Convertir Tabla a Json con SQL Server < 2016
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
ALTER PROCEDURE dbo.GetJSON @ObjectName VARCHAR(255), @registries_per_request smallint = null | |
AS | |
BEGIN | |
IF OBJECT_ID(@ObjectName) IS NULL | |
BEGIN | |
SELECT Json = ''; | |
RETURN | |
END | |
--SELECT CAST('<xml>Yep this is xml</xml>' AS XML) | |
DECLARE @Top NVARCHAR(20) = CASE WHEN @registries_per_request IS NOT NULL THEN 'TOP (' + CAST(@registries_per_request AS NVARCHAR) + ') ' ELSE '' END; | |
DECLARE @SQL NVARCHAR(MAX) = N'SELECT ' + @Top + '* INTO ##T FROM ' + @ObjectName; | |
EXECUTE SP_EXECUTESQL @SQL; | |
DECLARE @X xml = CAST( (SELECT * FROM ##T FOR XML PATH, root) AS XML); | |
SELECT '[' + | |
STUFF( | |
(SELECT * FROM | |
( | |
SELECT | |
',{' + | |
STUFF( | |
( | |
SELECT ',"' + COALESCE(b.c.value('local-name(.)','NVARCHAR(MAX)'),'') + '":' | |
+ ( IIF( ISNUMERIC(b.c.value('text()[1]','NVARCHAR(MAX)'))=1, b.c.value('text()[1]','NVARCHAR(MAX)'), '"'+b.c.value('text()[1]','NVARCHAR(MAX)')+'"') ) | |
FROM x.a.nodes('*') b(c) FOR XML PATH(''),TYPE | |
).value('(./text())[1]','NVARCHAR(MAX)') ,1, 1, '' | |
) + | |
'}' | |
FROM @X.nodes('/root/*') x(a) | |
) | |
JSON(theLine) FOR XML PATH(''),TYPE | |
).value('.','NVARCHAR(MAX)' ) | |
, 1, 1, '' | |
) | |
+']' | |
DROP TABLE ##T; | |
--SELECT Json = @X; | |
END | |
-- Tabla Clave Valor | |
CREATE TABLE T | |
( ID INT IDENTITY(1, 1) NOT NULL, | |
Col1 INT NOT NULL | |
); | |
INSERT dbo.T (Col1) | |
-- Llenando tabla 'T' | |
SELECT TOP 10 Number FROM Master..spt_values WHERE Type = 'P'; | |
-- Tabla con varios tipos de valor (string y numeric) | |
CREATE TABLE TS | |
( cod INT IDENTITY(1, 1) NOT NULL, | |
val NVARCHAR(500) DEFAULT '', | |
ext INT DEFAULT 0 | |
); | |
-- Llenando tabla TS | |
INSERT INTO TS VALUES ('val2',1),('val3',0),('val4',1),('val5',0); | |
-- Tabla con muchas columnas | |
CREATE TABLE T2 | |
( ID INT IDENTITY(1, 1) NOT NULL, | |
Col1 INT NOT NULL, | |
Col2 INT NOT NULL, | |
Col3 INT NOT NULL, | |
Col4 INT NULL | |
); | |
-- Llenando tabla TS | |
INSERT dbo.T2 (Col1, Col2, Col3) | |
SELECT TOP 10 Number, Number, Number FROM Master..spt_values WHERE Type='P'; | |
GO | |
-- example execute | |
EXECUTE dbo.GetJSON 'dbo.TS', 2; | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment