Я пытаюсь выбрать JSON свойств в качестве столбца. Свойства, которые необходимо выбрать, хранятся в какой-то другой таблице
CREATE TABLE [Templates](
[ID] [int] NOT NULL,
[Template] [nvarchar](max)
)
INSERT INTO Templates(ID,Template)
VALUES
(1,'{"FirstName":"foo"}'),
(2,'{"FirstName":"joe","LastName":"dow"}'),
(3,'{"LastName":"smith","Address":"1234 Test Drive"}'),
(4,NULL)
Declare @SQL NVARCHAR(max)
--For brevity purpose i am hardcoding these property names. In reality column names will come from another table
DECLARE @properties NVARCHAR(max) = '[Address],[FirstName],[LastName]'
Set @SQL = '
Select '+ @properties +'
From (
Select T.ID
,j.[Key]
,j.[Value]
From Templates T
Cross Apply OpenJSON(T.Template) AS j
) src
Pivot ( max(value) for [Key] in ('+ @properties +') ) pvt
'
Exec(@SQL)
SQL Fiddle
Приведенный выше код в основном работает, за исключением последней строки, где Template
- ПУСТО. (ID = 4) Ожидается: запрос должен вернуть 4 строки, а для последней строки все столбцы должны быть пустыми, кроме идентификатора.