【发布时间】:2020-08-24 10:24:14
【问题描述】:
我遗漏了一些东西,似乎找不到适合这种情况的任何东西。我想将自定义的SELECT 查询输出到VARIABLE 作为JSON。
鉴于以下基本表格和脚本,我可以轻松地将 SELECT 语句的结果从表格转换为 JSON 变量:
DECLARE @Table TABLE
(
[VALUE] nvarchar(100) Null
);
INSERT INTO @Table
SELECT N'Value 1' UNION ALL
SELECT N'Value 2' UNION ALL
SELECT N'Value 3';
DECLARE @JsonValue nvarchar(max);
SELECT @JsonValue =
(
SELECT *
FROM @Table
FOR JSON PATH
, INCLUDE_NULL_VALUES
);
SELECT @JsonValue;
这愉快地输出JSON:
[
{ "VALUE": "Value 1" },
{ "VALUE": "Value 2" },
{ "VALUE": "Value 3" }
]
现在,如果我想输出自定义查询:
DECLARE @JsonValue nvarchar(max);
SELECT @JsonValue =
(
SELECT N'Value 1' AS [VALUE] UNION ALL
SELECT N'Value 2' UNION ALL
SELECT N'Value 3'
FOR JSON PATH
, INCLUDE_NULL_VALUES
);
SELECT @JsonValue;
我得到:
The FOR XML and FOR JSON clauses are invalid in views, inline functions, derived tables, and subqueries when they contain a set operator. To work around, wrap the SELECT containing a set operator using derived table or common table expression or view and apply FOR XML or FOR JSON on top of it.
只运行查询的一部分:
SELECT N'Value 1' AS [VALUE] UNION ALL
SELECT N'Value 2' UNION ALL
SELECT N'Value 3'
FOR JSON PATH
, INCLUDE_NULL_VALUES
结果为@987654332@:
[
{ "VALUE": "Value 1" },
{ "VALUE": "Value 2" },
{ "VALUE": "Value 3" }
]
我尝试了一些不同的方法,例如 JSON_QUERY 等,但都失败了。我可以使用 CTE,但这感觉有点矫枉过正。我已经研究了文档,但我似乎无法理解我的不足之处,所以我希望有人有洞察力为我指明正确的方向。
【问题讨论】:
标签: json sql-server sql-server-2016