如何在TSQL选择查询中将行转换为JSON?

Boh*_*dan 1 sql t-sql sql-server json

以下查询将整个表作为单个JSON字符串返回(JSON对象列表 - 每行一个):

SELECT * FROM MyTable FOR JSON AUTO 
Run Code Online (Sandbox Code Playgroud)

我需要返回多行,其中每一行都是表格的一行的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>}
Run Code Online (Sandbox Code Playgroud)

如何在TSQL中执行此操作?

虽然可以通过连接字符串手工构建JSON字符串,但我更愿意重用现有的工具来处理值中的引号等情况.

Jas*_*yrd 10

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

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

  • 你也从未指定过版本 (3认同)
  • 对于JSON AUTO也在2016年开始.https://docs.microsoft.com/en-us/sql/relational-databases/json/format-json-output-automatically-with-auto-mode-sql-server. (2认同)

小智 5

万一其他人偶然发现了这一点。与@Waldemar 类似,但不需要在相关子查询中进行自联接:

SELECT (SELECT A, B, C FOR JSON PATH, WITHOUT_ARRAY_WRAPPER)
FROM MyTable
Run Code Online (Sandbox Code Playgroud)

A、B 和 C 列来自 FROM 中的“MyTable”,而不需要第二个引用和隐式自连接。