只要 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()
使这是一个正确的查询。很高兴知道为什么?