0

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 ONsp をandで開始しようとしましたSET QUOTED_IDENTIFIER OFFが、いずれの場合も同じエラーがスローされます

3つ目のエラーは

キーワード「with」付近の構文が正しくありません。このステートメントが共通テーブル式、xmlnamespaces 句、または変更追跡コンテキスト句である場合、前のステートメントはセミコロンで終了する必要があります。

前のステートメントはセミコロンで終わります

json を SQL Server に挿入する方法を示す多くの例があり、できる限り従おうとしましたが、シナリオはすべて私のものよりも複雑に見えますが、それでも正しく理解できません。

4

2 に答える 2