ストアド プロシージャを使用した一括挿入: トラブルシューティング
ストアド プロシージャを使用してデータを一括挿入しようとしたときに、開発者が構文エラーを検出しました。目標は、動作する BULK INSERT クエリをプロシージャに複製することでした。ここでは、問題の分析とその解決策を示します。
この問題は、ストアド プロシージャ内でファイル名を変数として BULK INSERT コマンドに渡そうとすることで発生します。残念ながら、これは BULK INSERT でサポートされていない操作です。
変数を使用して失敗した試行の例を次に示します:
DECLARE @filename VARCHAR(255) SET @filename = 'e:-digit Commercial.csv' BULK INSERT ZIPCodes FROM @filename WITH
代わりに、BULK INSERT コマンドはハードコーディングされたファイル パスを期待します。 。この制限を回避するには、BULK INSERT ステートメントを固定ファイル名の文字列として構築し、動的 SQL として実行することを検討してください。
DECLARE @filepath NVARCHAR(500) SET @filepath = N'e:-digit Commercial.csv' DECLARE @bulkinsert NVARCHAR(2000) SET @bulkinsert = N'BULK INSERT ZIPCodes FROM ''' + @filepath + N''' WITH (FIRSTROW = 2, FIELDTERMINATOR = '','', ROWTERMINATOR = ''\n'')' EXEC sp_executesql @bulkinsert
動的 SQL を使用すると、構築されたステートメントを実行して、元のストアド プロシージャの実装で構文エラーが発生しました。
以上がBULK INSERT がストアド プロシージャ内の変数ファイル パスを受け入れないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。