【发布时间】:2021-06-20 08:30:28
【问题描述】:
尝试创建一个存储过程以将 json 作为行插入到现有的空表中。 json 属性与表列匹配。
此存储过程返回如下代码所示的 3 个错误
declare @json nvarchar(max)
declare @db_name sysname = 'test1'
set @json= N'{
"Cutouts":
[
{
"ItemCode":"Circle",
"MinutesLabor":8
},
{
"ItemCode":"Star",
"MinutesLabor":10
}
]
}';
--print @json
declare @str nvarchar(max)
set @str = N'INSERT [' + QUOTENAME (@db_name) + '].[dbo].[Cutouts] (ItemCode, MinutesLabor)
SELECT ItemCode, MinutesLabor
FROM OPENJSON(' + @json + ')
WITH (
ItemCode varchar(8) ''$.Cutouts.ItemCode'',
MinutesLabor decimal(9,1) ''$.Cutouts.MinutesLabor''';
--print @str
exec (@str)
错误是
消息 102,第 15 级,状态 1,第 4 行
'Cutouts' 附近的语法不正确。
我尝试遵循SQLShack 的 sql server 中使用 json 的示例中使用的 json 格式。我已经在 JSONLint 验证了 json
以' { "ItemCode":"Circle", 开头的标识符 "MinutesLabor":8 ' 太长。最大长度为 128。
我尝试使用 SET QUOTED_IDENTIFIER ON 和 SET QUOTED_IDENTIFIER OFF 启动 sp,但在每种情况下都会引发相同的错误
第三个错误是
关键字“with”附近的语法不正确。如果这个语句是一个公用表表达式、一个 xmlnamespaces 子句或一个更改跟踪上下文子句,则前面的语句必须以分号结束。
前面的语句确实以分号结尾
有很多示例展示了如何将 json 插入 SQL Server,我已尽力遵循,但场景似乎都比我的复杂,但我仍然无法正确处理。
【问题讨论】:
标签: sql-server stored-procedures sql-server-json