使用 FOR JSON 和 CTE 并将其存储在变量中
Using FOR JSON and CTE and store it in a variable
如何从使用通用 Table 表达式 (CTE) 的 select 语句中使用 FOR JSON
在 T-SQL 中生成 JSON然后将其存储在局部变量中?
如果没有 CTE,它可能看起来像这样:
DECLARE @var NVARCHAR(MAX) = (
SELECT x.Val
FROM (VALUES (1)) AS x(Val)
FOR JSON AUTO
)
SELECT @var
但是,如果像下面这样使用 CTE,语法会怎样?
WITH y AS (
SELECT Val
FROM (VALUES (1)) AS _(Val)
)
SELECT x.Val, y.Val ValY
FROM (VALUES (1)) AS x(Val)
JOIN y ON y.Val = x.Val
FOR JSON AUTO
用DECLARE @var NVARCHAR(MAX) = ( ... )
包围是行不通的。
可能是这样的?
DECLARE @json NVARCHAR(MAX);
WITH y AS (
SELECT Val
FROM (VALUES (1)) AS _(Val)
)
SELECT @json=
(
SELECT x.Val, y.Val ValY
FROM (VALUES (1)) AS x(Val)
JOIN y ON y.Val = x.Val
FOR JSON AUTO
);
SELECT @json;
此外,您可以将 CTE 作为 sub-query 而不是 "WITH"。 CTE 不超过 "syntactic sugar" 实际上是为了避免重复 sub-queries 并让你的 SQL 更易读。您可以将其用于相同的用途:
DECLARE @json NVARCHAR(MAX)=
(
SELECT x.Val, y.Val ValY
FROM (VALUES (1)) AS x(Val)
JOIN (
SELECT Val
FROM (VALUES (1)) AS _(Val)
) y ON y.Val = x.Val
FOR JSON AUTO
);
SELECT @json
如何从使用通用 Table 表达式 (CTE) 的 select 语句中使用 FOR JSON
在 T-SQL 中生成 JSON然后将其存储在局部变量中?
如果没有 CTE,它可能看起来像这样:
DECLARE @var NVARCHAR(MAX) = (
SELECT x.Val
FROM (VALUES (1)) AS x(Val)
FOR JSON AUTO
)
SELECT @var
但是,如果像下面这样使用 CTE,语法会怎样?
WITH y AS (
SELECT Val
FROM (VALUES (1)) AS _(Val)
)
SELECT x.Val, y.Val ValY
FROM (VALUES (1)) AS x(Val)
JOIN y ON y.Val = x.Val
FOR JSON AUTO
用DECLARE @var NVARCHAR(MAX) = ( ... )
包围是行不通的。
可能是这样的?
DECLARE @json NVARCHAR(MAX);
WITH y AS (
SELECT Val
FROM (VALUES (1)) AS _(Val)
)
SELECT @json=
(
SELECT x.Val, y.Val ValY
FROM (VALUES (1)) AS x(Val)
JOIN y ON y.Val = x.Val
FOR JSON AUTO
);
SELECT @json;
此外,您可以将 CTE 作为 sub-query 而不是 "WITH"。 CTE 不超过 "syntactic sugar" 实际上是为了避免重复 sub-queries 并让你的 SQL 更易读。您可以将其用于相同的用途:
DECLARE @json NVARCHAR(MAX)=
(
SELECT x.Val, y.Val ValY
FROM (VALUES (1)) AS x(Val)
JOIN (
SELECT Val
FROM (VALUES (1)) AS _(Val)
) y ON y.Val = x.Val
FOR JSON AUTO
);
SELECT @json