Как вставить newid () в столбец при использовании FROM opensjon

Я хочу вставить 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.

Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
0
0
403
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

NamedArray 25.04.2018 21:12

Рад помочь :-)

Zohar Peled 25.04.2018 21:30

Другие вопросы по теме