我想在表格中插入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
手动拔出每个键。
答案 0 :(得分: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'
)