SQL-生成不带列名的JSON数组
假设我们有这些数据SQL-生成不带列名的JSON数组,sql,json,tsql,sql-server-2016,Sql,Json,Tsql,Sql Server 2016,假设我们有这些数据 CREATE TABLE [dbo].[tValues] ( [cValue] [VARCHAR](50) NULL ) ON [PRIMARY] INSERT INTO [dbo].[tValues] ([cValue]) VALUES ('red'), ('green'), ('blue'), ('brown') 通过此查询: SELECT (JSON_QUERY((SELECT 'Ball' AS ti
CREATE TABLE [dbo].[tValues]
(
[cValue] [VARCHAR](50) NULL
) ON [PRIMARY]
INSERT INTO [dbo].[tValues] ([cValue])
VALUES ('red'), ('green'), ('blue'), ('brown')
通过此查询:
SELECT
(JSON_QUERY((SELECT
'Ball' AS title,
'20cm' AS size,
(SELECT cValue FROM tValues FOR JSON PATH) AS [colors]
FOR JSON PATH))) AS product
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER
我得到了这个JSON结果:
{
"product": [
{ "title":"Ball",
"size":"20cm",
"colors": [
{ "cValue": "red" },
{ "cValue": "green" },
{ "cValue": "blue" },
{ "cValue": "brown" }
]
}
]
}
但是我需要在颜色中不带列名和花括号的标签,如下所示:
{
"product": [
{
"title": "Ball",
"size": "20cm",
"colors": [ "red", "green", "blue", "brown" ]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
}
]
}
如何实现这一点?一种可能的解决方案是使用for xml path
和stuff
构建数组:
SELECT
(JSON_QUERY((SELECT
'Ball' AS title,
'20cm' AS size,
JSON_QUERY(
'[' + STUFF(( SELECT ',' + '"' + cValue + '"'
FROM tValues
FOR XML PATH('')),1,1,'') + ']' ) AS [colors]
FOR JSON PATH)
)) AS product
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER
结果:
{
"product":[
{
"title":"Ball",
"size":"20cm",
"colors":[
"red",
"green",
"blue",
"brown"
]
}
]
}
一种可能的解决方案是使用for xml path
和stuff
构建数组:
SELECT
(JSON_QUERY((SELECT
'Ball' AS title,
'20cm' AS size,
JSON_QUERY(
'[' + STUFF(( SELECT ',' + '"' + cValue + '"'
FROM tValues
FOR XML PATH('')),1,1,'') + ']' ) AS [colors]
FOR JSON PATH)
)) AS product
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER
结果:
{
"product":[
{
"title":"Ball",
"size":"20cm",
"colors":[
"red",
"green",
"blue",
"brown"
]
}
]
}
从SQL Server 2017开始有STRING_AGG()
,但实际上,这应该包含在JSON的语法中……从SQL Server 2017开始有STRING_AGG()
,但实际上,这应该包含在JSON的语法中。。。