ホームページ >データベース >mysql チュートリアル >SQL ストアド プロシージャで 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
このコードは、ファイル パスを変数 @filepath に割り当てます。次に、BULK INSERT ステートメントを文字列として構築し、変数 @bulkinsert に保存します。最後に、動的 SQL プロシージャ sp_executesql を使用して、構築されたステートメントを実行します。このアプローチにより、ファイル パスをパラメータ化し、ストアド プロシージャ内で BULK INSERT ステートメントを効果的に実行できます。
以上がSQL ストアド プロシージャで BULK INSERT で変数を使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。