gpt4 book ai didi

arrays - 为什么我不能在 T-SQL 中使用 JSON_ARRAY() 合并 2 行?

转载 作者:行者123 更新时间:2023-12-05 04:22:32 24 4
gpt4 key购买 nike

在 SQL Server 2022 和 Azure SQL 中,函数 JSON_ARRAY已添加。

这个有效:

select 1 as id, JSON_ARRAY(1 , 2 , 3) as array_col

这不是:

select 1 as id, JSON_ARRAY(1 , 2 , 3) as array_col
union all
select 1 as id, JSON_ARRAY(1 , 2 , 3) as array_col

联合给我 [S0002][206] 第 1 行:操作数类型冲突:nvarchar(max) 与 void 类型不兼容

那么为什么工会行不通呢?

最佳答案

对我来说似乎是一个错误,union(有或没有all)和intersect发生了一些事情,except 等,在 JSON 转换之前将数组转换为简单的字符串。但是两个子查询之间的连接有效:

select * FROM 
(select 1 as id, JSON_ARRAY(1 , 2 , 3) as array_col ) AS x
INNER JOIN
(select 1 as id, JSON_ARRAY(1 , 2 , 3) as array_col) AS y
ON x.id = y.id;

我建议提交错误 here (至少目前是这样)。

与此同时,您可以使用针对表达式的显式排序规则强制执行略有不同的行为:

select 1 as id, JSON_ARRAY(1 , 2 , 3) 
COLLATE SQL_Latin1_General_CP1_CI_AS as array_col
UNION ALL
select 1 as id, JSON_ARRAY(1 , 2 , 3)
COLLATE SQL_Latin1_General_CP1_CI_AS as array_col;

enter image description here

对于整数,您使用什么排序规则可能无关紧要(只要您对联合中的所有对齐表达式使用相同的排序规则即可!)但是,对于字符串,您可以改为使用:

select 1 as id, JSON_ARRAY(1 , 2 , 3) 
COLLATE DATABASE_DEFAULT as array_col
UNION ALL
select 1 as id, JSON_ARRAY(1 , 2 , 3)
COLLATE DATABASE_DEFAULT as array_col;

一个更丑陋的解决方法可能是强制具体化两个查询的输出,并联合那些:

select 1 as id, JSON_ARRAY(1 , 2 , 3) as array_col into #x;
select 1 as id, JSON_ARRAY(1 , 2 , 3) as array_col into #y;
select * from #x union all select * from #y;

enter image description here

关于arrays - 为什么我不能在 T-SQL 中使用 JSON_ARRAY() 合并 2 行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73972440/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com