[英]How to get JSON output from sql server 2016
我正在嘗試從SQL Server 2016(Tsql)創建JSON文件。 所需的輸出應如下所示
[{
"name": "xxxx",
"data": [
["Col1Name", Col1Value],
["Col2Name", Col2Value],
["Col3Name", Col3Value],
["Col4Name", Col4Value],
["Col5Name", Col5Value],
]
}]
或者它可能像
{
"name": "xxxxxx",
"data": [Col1Value, Col2Value, Col3Value, Col4Value, Col5Value]
}
我嘗試了一些使用JSON AUTO和JSON PATH的 SQL查詢,如下所示,但沒有一個能為我提供所需的輸出。 任何幫助都是非常明顯的。
SELECT f.name,
data.OneMonth,
data.ThreeMonth,
data.YTD,
data.OneYear,
data.ThreeYear,
data.FiveYear,
data.TenYear,
data.SinceIncept
FROM dbo.Fund f
JOIN dbo.FundPerf data on f.FundId = sc.FundId
FOR JSON AUTO
你可以試試看
DECLARE @Table TABLE (name varchar(10), Col1Name VARCHAR(10),Col2Name VARCHAR(10),Col3Name VARCHAR(10),Col4Name VARCHAR(10),Col5Name VARCHAR(10))
INSERT INTO @Table VALUES ('xxx', 'Col1Value','Col2Value','Col3Value','Col4Value','Col5Value')
SELECT name
, Col1Name as 'data.Col1Name'
, Col2Name as 'data.Col2Name'
, Col3Name as 'data.Col3Name'
, Col4Name as 'data.Col4Name'
, Col4Name as 'data.Col5Name'
FROM @Table
FOR JSON PATH
結果:
[
{
"name":"xxx",
"data":{
"Col1Name":"Col1Value",
"Col2Name":"Col2Value",
"Col3Name":"Col3Value",
"Col4Name":"Col4Value",
"Col5Name":"Col4Value"
}
}
]
我認為使用簡單的查詢是不可能的。 您始終可以使用存儲過程和JSON_MODIFY
:
create table #temp (name varchar(30), col1 varchar(30), col2 varchar(30))
insert into #temp values ('Jason', 'hello', 'world'), ('yeshwanth', 'goodbye', 'world')
create or alter procedure sp_get_json @json varchar(max) out as
begin
set @json = '[]'
declare @name varchar(30), @col1 varchar(30), @col2 varchar(30), @item varchar(max)
declare c cursor for select name, col1, col2 from #temp
open c
fetch c into @name, @col1, @col2
while @@FETCH_STATUS = 0
begin
set @item = JSON_MODIFY('{}', '$.name', @name)
set @item = JSON_MODIFY(@item, '$.data', JSON_QUERY('[]'))
set @item = JSON_MODIFY(@item, 'append $.data', @col1)
set @item = JSON_MODIFY(@item, 'append $.data', @col2)
set @json = JSON_MODIFY(@json, 'append $', JSON_QUERY(@item))
fetch c into @name, @col1, @col2
end
close c
deallocate c
end
declare @j varchar(max)
exec sp_get_json @json = @j out
print @j
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.