Вернуть JSON с именами столбцов в SQL Server 2016 - PullRequest
0 голосов
/ 30 января 2019

Я пытаюсь получить значения JSON всякий раз, когда результат является пустым в SQL Server 2016.

Пример:

select Col1,Col2,Col3 from test where Col1 = 2  

enter image description here

select Col1,Col2,Col3 from test where Col1 = 2 for json auto,include_null_values

Тогда я не получаю значения JSON.Давать только пустое значение.enter image description here

Ожидаемый результат:

[{"Col1":"","Col2":"","Col3":""}]

Не могли бы вы помочь мне в этом.

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Просто еще один вариант, когда вам не нужно выражать отдельные столбцы, используя:

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":""}]
0 голосов
/ 30 января 2019

В случае отсутствия подходящих строк ваш запрос на выборку также не будет возвращать никаких строк.В этом случае вы можете использовать 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, но это не должно быть большой проблемой.

...