SQL 2016有一个新特性,可以将SQL Server上的数据转换为JSON。我在将对象数组组合为值数组时遇到了困难,即
示例-
CREATE TABLE #temp (item_id VARCHAR(256))
INSERT INTO #temp VALUES ('1234'),('5678'),('7890')
SELECT * FROM #temp
--convert to JSON
SELECT (SELECT item_id
FROM #temp
FOR JSON PATH,root('ids'))
结果-
{
"ids": [{
"item_id": "1234"
},
{
"item_id": "5678"
},
{
"item_id": "7890"
}]
}
但我要的结果是-
"ids": [
"1234",
"5678",
"7890"
]
有人能帮帮我吗?
8条答案
按热度按时间jxct1oxe1#
谢谢!我们找到的解决方案是先转换成XML-
mgdq6dx12#
马丁!
我相信这是一个更简单的方法:
tjjdgumg3#
当我们想把字符串连接成json数组时,那么:
1.转义字符串- STRING_ESCAPE
1.使用逗号分隔符连接字符串- STRING_AGG,逗号ASCII代码为44
1.在括号中添加引号- QUOTENAME(无参数)
1.以json - JSON_QUERY形式返回字符串(包含元素数组)
ulydmbyx4#
由于基元值数组是有效的JSON,所以SQL Server的JSON功能中没有内置选择基元值数组的工具,这似乎有些奇怪(如果相反,这样的功能存在,至少在进行了大量搜索之后,我还没有发现它)。
上述方法的工作原理与描述相同,但是当应用于较大查询中的字段时,原语数组要用引号括起来。
例如,这个
作品制作:
但是,按照上述方法,这:
产生:
其中 * Children * 数组被 Package 为字符串。
4uqofj5v5#
此版本(基于其他版本):
[]
需要SQL 2017或更高版本(由于
STRING_AGG
):r1zhe5dt6#
下面是一个可能不实用的疯狂想法:使用
JSON_MODIFY
递归遍历数据集并将内容追加到JSON数组中:为了便于说明,我将其保持简单。当然,您将对其进行调整以使其具有动态性。这将产生:
甚至可用于模拟标准SQL
JSON_ARRAYAGG
iszxjhcz7#
这些解决方案中的大多数实际上都是创建一个表示数组内容的CSV,然后将该CSV转换为最终的JSON格式。
lndjwyie8#
我认为以下内容在SQL Server 2017中会更容易