在SQL Server 2016中结果为空时,我试图获取JSON值。
示例:
select Col1,Col2,Col3 from test where Col1 = 2
select Col1,Col2,Col3 from test where Col1 = 2 for json auto,include_null_values
预期结果:
[{"Col1":"","Col2":"","Col3":""}]
请您帮我一下。
谢谢。
答案 0 :(得分:0)
如果没有匹配的行,则您的选择查询也将不返回任何行。在这种情况下,您可以使用ISNULL(或COALESCE)并返回一些默认字符串,如您所期望的那样。
select isnull(
(select Col1,Col2,Col3 from test where Col1 = 2 for json auto,include_null_values) -- Your query as nested select
, '[{"Col1":"","Col2":"","Col3":""}]' -- This string will be returned if there are no matching rows
)
不幸的是,从查询中获取默认字符串并不容易,因此您必须在此处重复select
查询中的列名,但这应该不是大问题。
答案 1 :(得分:0)
这是另一个不必使用以下方式来表达各个列的选项:
sys.dm_exec_describe_first_result_set()
示例dbFiddle
Create Table #YourTable (Col1 int,Col2 int,Col3 int)
Insert Into #YourTable values
(1,25,75)
,(3,50,100)
Select coalesce(
(Select Col1,Col2,Col3 From #YourTable Where Col1 = 2 For json auto,include_null_values )
,
(Select '[{'+Stuff((Select Concat(',"',Name,'":""') From sys.dm_exec_describe_first_result_set('Select * from #YourTable',null,null) For XML Path ('')),1,1,'')+'}]' )
)
返回
[{"Col1":"","Col2":"","Col3":""}]