我们必须使用某种格式将数据导出格式设置为JSON。这是一个测试案例:
DECLARE @tmp TABLE (ID INT, value1 VARCHAR(30), value2 VARCHAR(30))
INSERT @tmp VALUES (1,'test1','test2')
输出应为:
{
"ID": 1,
"custom_attributes": [
{
"attribute_code": "value1",
"value": "test1"
},
{
"attribute_code": "value2",
"value": "test2"
}
]
}
我们必须为某些列创建两个键值对。第一个描述列名,第二个描述值。然后将其打包成一个数组。
我想知道使用本机t-sql JSON函数是否可行,因为我需要适当的JSON作为输出(而不是字符串)。
答案 0 :(得分:1)
您需要使用嵌套的FOR JSON
:
DECLARE @tmp TABLE(ID INT, value1 VARCHAR(30), value2 VARCHAR(30));
INSERT @tmp VALUES (1, 'test1', 'test2');
SELECT ID, custom_attributes = (
SELECT attribute_code, value
FROM @tmp AS x
-- column to rows
CROSS APPLY (VALUES
('value1', value1),
('value2', value2)
) AS a(attribute_code, value)
WHERE x.ID = t.ID
FOR JSON PATH
)
FROM @tmp AS t
FOR JSON AUTO
答案 1 :(得分:0)
我找到了一个可能的答案,虽然可行,但似乎有点复杂...
SELECT tmp.ID
, (
SELECT ca.attribute_code
, ca.[value]
FROM @tmp tmp2
CROSS APPLY (
VALUES
('value1',value1),
('value2',value2)
) ca (attribute_code, [value])
WHERE tmp2.ID = tmp.ID
FOR JSON PATH
) [custom_attributes]
FROM @tmp tmp
FOR JSON PATH