2017-10-18 81 views
0

以下查询返回整个表单JSON字符串(JSON对象列表 - 每行一个):如何在TSQL select查询中将行转换为JSON?

SELECT * FROM MyTable FOR JSON AUTO 

我需要返回多个行,其中的每一行都将是表的一个劲儿地行的JSON字符串。

例如,如果表中的字段是A,B,C的输出应该是:

{A: <value>, B: <value>, C: <value>} 
{A: <value>, B: <value>, C: <value>} 
{A: <value>, B: <value>, C: <value>} 
... 
{A: <value>, B: <value>, C: <value>} 

如何在TSQL做到这一点?

虽然可以通过串联字符串手动构建JSON字符串,但我更愿意重用现有的工具来处理值中的引号之类的情况。

+0

您使用SQL server 2016吗? –

回答

0

这将从select语句的行中返回json数据。

DECLARE @json NVARCHAR(Max) 
SET @json = (SELECT * FROM [Sales].[Customers] FOR JSON PATH, ROOT('data')) 
SELECT value 
FROM OPENJSON(@json,'$.data'); 
+0

Openjson仅在sql server 2016中可用,https://docs.microsoft.com/en-us/sql/t-sql/functions/openjson-transact-sql –

+0

对于JSON AUTO也在2016年开始。 https://docs.microsoft.com/en-us/sql/relational-databases/json/format-json-output-automatically-with-auto-mode-sql-server。 –

+0

你也从未指定过一个版本 –

0

你可以试试这个。

SELECT JTBL.* FROM MyTable A 
CROSS APPLY (select A, B, C from MyTable B WHERE B.ID = A.ID FOR JSON AUTO) JTBL (JSTXT)