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
「カットアウト」付近の構文が正しくありません。
SQLShackの sql サーバーで json を操作する例で使用されている json 形式に従うようにしました。JSONLintで json を検証しました
' { "ItemCode":"Circle", "MinutesLabor":8 ' で始まる識別子が長すぎます。最大長は 128 です。
SET QUOTED_IDENTIFIER ON
sp をandで開始しようとしましたSET QUOTED_IDENTIFIER OFF
が、いずれの場合も同じエラーがスローされます
3つ目のエラーは
キーワード「with」付近の構文が正しくありません。このステートメントが共通テーブル式、xmlnamespaces 句、または変更追跡コンテキスト句である場合、前のステートメントはセミコロンで終了する必要があります。
前のステートメントはセミコロンで終わります
json を SQL Server に挿入する方法を示す多くの例があり、できる限り従おうとしましたが、シナリオはすべて私のものよりも複雑に見えますが、それでも正しく理解できません。