Я хочу вставить newid() в таблицу. Он не входит в состав самого объекта JSON, поэтому мне нужно как-то его передать. Кажется, я не могу этого сделать ...
declare @jsonString nvarchar(max),
--sample incoming data, JSON object
set @jsonString = '{
"PosTitle": "Tech",
"PosCode": "699887",
"FileName": "clickme.exe",
}'
Я могу успешно проанализировать строку JSON и вставить ее во временную таблицу:
--establish temp table
CREATE TABLE #tblDestination(
[id] [uniqueidentifier] default newsequentialid(),
[PosTitle] [varchar](80) NULL,
[PosCode] [varchar](5) NULL,
[FileName] [varchar](60) NULL,
)
--parse the JSON string
--and insert it into the temp table
insert into #tblDestination
select *
from openjson(@jsonString, '$')
with
(
newid(), --I need to insert a newid() into the [id column]
PosTitle varchar(80) '$.PosTitle',
PosCode varchar(5) '$.PosCode',
[FileName] varchar(60) '$.FileName',
)
Я могу заставить его работать ... Столбцы в источнике должны быть идеально выровнены с местом назначения. В исходном коде нет newid(), поэтому мне нужно собрать его и передать ... но я не могу понять, как это сделать.
Насколько я понимаю, with является частью CTE.
Я пытался избежать объявления var для каждого ключа / значения и вручную извлекать каждый из них через select JSON_VALUE.

OpenJson - это функция с табличным значением, просто выберите из нее NewId() и *.
Кроме того, всегда указывайте список столбцов при вставке данных в таблицу:
insert into #tblDestination ([id], [PosTitle], [PosCode], [FileName])
select newid(), *
from openjson(@jsonString, '$')
with
(
PosTitle varchar(80) '$.PosTitle',
PosCode varchar(5) '$.PosCode',
[FileName] varchar(60) '$.FileName'
)
Рад помочь :-)
Круто, спасибо, это прекрасно! Я не знал, что могу манипулировать оператором select в этом конкретном месте. Приятно знать, что при необходимости я могу обрабатывать больше данных.