Skip to content

Instantly share code, notes, and snippets.

@jrodev
Last active October 2, 2017 23:12
Show Gist options
  • Save jrodev/17d8ece4dff5a41aad7cbb31094fa19c to your computer and use it in GitHub Desktop.
Save jrodev/17d8ece4dff5a41aad7cbb31094fa19c to your computer and use it in GitHub Desktop.
Convertir Tabla a Json con SQL Server < 2016
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