1

只要 Json 的内容与表匹配,使用 OPENJSON 在 SQL 表中执行插入和存储 JSON 似乎非常简单。

当我要插入到表中的值之一不是 JSON 字符串的一部分时,问题就开始了。

IE 在下面的场景中,我试图将日期作为硬编码变量@createdON 传递,但我看到以下错误:

[代码:207,SQL 状态:42S22] 列名“20171128”无效。

'{
DECLARE @json VARCHAR(MAX)
DECLARE @createdON VARCHAR(MAX)

SET @createdON = "20171128" 

SET @json = '{
    "contactStateDescriptions": [
     {
       "ContactStateCategory": "Queue",
       "ContactStateDescription": "Ok",
       "ContactStateId": 1
     },
     {
       "ContactStateCategory": "PreQueue",
       "ContactStateDescription": "Wait",
       "ContactStateId": 2
     }
   ]
 }'
INSERT INTO ContactState
(
ContactStateCategory, ContactStateDescription, ContactStateId, "DATE"
)
SELECT *, @CreatedON AS createdON
FROM OPENJSON(@json, '$.contactStateDescriptions')
WITH (
ContactStateCategory NVARCHAR(255) '$.ContactStateCategory',
ContactStateDescription NVARCHAR(255) '$.ContactStateDescription',
ContactStateId NVARCHAR(255) '$.ContactStateId' );   
}'

基本上,我正在尝试使用 JSON 中未包含的日期值来丰富我的 JSON 文件的导入。

顺便说一句更换;

声明 @createdON VARCHAR(MAX) 并设置 createdON = "20171128"

声明 @createdON DATETIME 并选择 createdON = GETDATE()

使这是一个正确的查询。很高兴知道为什么?

4

0 回答 0