ホームページ > データベース > mysql チュートリアル > BULK INSERT がストアド プロシージャ内の変数ファイル パスを受け入れないのはなぜですか?

BULK INSERT がストアド プロシージャ内の変数ファイル パスを受け入れないのはなぜですか?

Susan Sarandon
リリース: 2024-12-26 22:47:09
オリジナル
234 人が閲覧しました

Why Doesn't BULK INSERT Accept Variable File Paths in Stored Procedures?

ストアド プロシージャを使用した一括挿入: トラブルシューティング

ストアド プロシージャを使用してデータを一括挿入しようとしたときに、開発者が構文エラーを検出しました。目標は、動作する 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート