Это не так просто, как должно быть ...
AFAIK Нет способа создать массив naked json с sql-сервером.Но вы можете обмануть это на строковом уровне:
DECLARE @exist TABLE(id VARCHAR(100));
DECLARE @miss TABLE(id VARCHAR(100));
INSERT INTO @exist VALUES ('exist1'),('exist2');
INSERT INTO @miss VALUES ('miss1'),('miss2');
- Это создаст массив объектов, который вы хотите
SELECT id FROM @exist
FOR JSON PATH
- И это создаст голый *Массив 1012 * с использованием некоторых довольно уродливых уловок.
SELECT REPLACE(REPLACE(REPLACE(
(
SELECT id from @miss
FOR JSON PATH
),'"id":',''),'{',''),'}','')
- Теперь мы должны объединить оба.И снова нам нужен трюк.Мы используем JSON_QUERY()
в литерале JSON, чтобы избежать экранированных кавычек.
SELECT
(
SELECT id FROM @exist
FOR JSON PATH
) AS existing
,JSON_QUERY(
REPLACE(REPLACE(REPLACE(
(
SELECT id from @miss
FOR JSON PATH
),'"id":',''),'{',''),'}','')
) AS missing
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER;
Это результат
{
"existing":[{"id":"exist1"},{"id":"exist2"}] <--array of objects
,"missing":["miss1","miss2"] <--array of naked values
}
Понятия не имею, почему этого нельзя сделать вне коробки ...