Ответ на запрос в формате JSON без имени столбца - PullRequest
0 голосов
/ 03 февраля 2019

Моя схема таблицы выглядит примерно так:

DECLARE @mytable AS TABLE(ID INT, EmpName VARCHAR(10), Age INT);

INSERT INTO @mytable
VALUES
(1,     'a', 1),
(2,     'b', 2),
(3,     'c', 3),
(4,     'd', 4),
(5,     'e', 5),
(6,     'f', 6),
(7,     'g', 7),
(8,     'h', 8),
(9,     'i', 9),
(10,    'j', 10);

Первоначально моя процедура возвращалась с данными как

SELECT ID, EmpName, Age FROM @mytable;

После обработки данных на веб-страницу отправляется как

[{1,"a",1},
{2,"b",2},
{3,"c",3},
{4,"d",4},
{5,"e",5},
{6,"f",6},
{7,"g",7},
{8,"h",8},
{9,"i",9},
{10,"j",10}]

Если я использую

SELECT ID, EmpName, Age
FROM @mytable
FOR JSON AUTO;

, результат будет похож на

[{"ID":1,"EmpName":"a","Age":1},
 {"ID":2,"EmpName":"b","Age":2},
 {"ID":3,"EmpName":"c","Age":3},
 {"ID":4,"EmpName":"d","Age":4},
 {"ID":5,"EmpName":"e","Age":5},
 {"ID":6,"EmpName":"f","Age":6},
 {"ID":7,"EmpName":"g","Age":7},
 {"ID":8,"EmpName":"h","Age":8},
 {"ID":9,"EmpName":"i","Age":9},
 {"ID":10,"EmpName":"j","Age":10}]

Так что мне нужно получить тот же ответ, но без имени столбца, какfront-end lib использует массив JSON без ключей.Я надеюсь, что я ясен в моем конце.Спасибо.

Ответы [ 2 ]

0 голосов
/ 03 февраля 2019

Для построения строки можно использовать трюк «выбрать переменную».

declare @JsonesceString varchar(max);

select @JsonesceString = concat(@JsonesceString+','+char(10),'{',ID,',"',EmpName,'",',age,'}')
from @mytable
order by ID;

select concat('[',@JsonesceString,']') as Result;

Возвращает значение:

[{1,"a",1},
{2,"b",2},
{3,"c",3},
{4,"d",4},
{5,"e",5},
{6,"f",6},
{7,"g",7},
{8,"h",8},
{9,"i",9},
{10,"j",10}]
0 голосов
/ 03 февраля 2019

Попробуйте это:

SELECT STUFF
(
    (
        SELECT CONCAT(',{', ID, ', "', EmpName, '", ', age, '}')
        FROM @mytable
        FOR XML PATH(''), TYPE
    ).value('.', 'varchar(max)')
    ,1
    ,1
    ,'['
) + ']';
...