Как вставить newid () в столбец при использовании FROM opensjon - PullRequest
0 голосов
/ 25 апреля 2018

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

Я пытался избежать необходимости объявлять переменную для каждого из ключей / значений и вручную извлекать каждую из них через select JSON_VALUE.

1 Ответ

0 голосов
/ 25 апреля 2018

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'
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...