在SQL Server 2016 +中,如何转换如下表:
+---------+----------+
| Kee | Val |
+---------+----------+
| aaaaaa | 11111111 |
| bbbbbbb | 2222222 |
+---------+----------+
插入一个看起来像这样的对象:
{
"aaaaaa": "11111111",
"bbbbbbb": "2222222"
}
这是我尝试过的:
CREATE TABLE #tmp
(
Kee VARCHAR(100),
Val VARCHAR(100)
)
INSERT INTO #tmp
(
Kee,
Val
)
VALUES
('aaaaaa', '11111111'),
('bbbbbbb', '2222222')
SELECT t.Kee,
t.Val
FROM #tmp AS t
FOR JSON AUTO
DROP TABLE #tmp
但是它给出了:
[
{
"Kee": "aaaaaa",
"Val": "11111111"
},
{
"Kee": "bbbbbbb",
"Val": "2222222"
}
]
答案 0 :(得分:2)
不幸的是,SQL Server的Json支持并不那么灵活。
您将必须手动构造该json,但是使用基本的字符串连接技术非常简单。
2017年之前的版本将for xml path
与stuff
一起使用:
SELECT STUFF(
(
SELECT '","'+ t.Kee +'":"'+ t.Val
FROM #tmp AS t
FOR XML PATH('')
), 1, 2, '{') + '}' As JsonResult
2017年,SQL Server终于引入了内置的string_agg函数,使获得该结果所需的代码更加简单:
SELECT '{"' + STRING_AGG(t.Kee +'":"'+ t.Val, '","') +'"}'
FROM #tmp As t
结果(在两种情况下):
{"aaaaaa":"11111111","bbbbbbb":"2222222"}