T-SQL での一括挿入用の変数のキャスト
T-SQL では、BULK INSERT ステートメントを使用して外部からデータをインポートできます。ファイルをテーブルに入れます。ただし、文字列変数をデータ ソースとして使用する場合、エラーが発生する可能性があります。
問題:
次の T-SQL コードはエラーで失敗します (一部)ストアド プロシージャ):
DECLARE @CSVfile nvarchar(255); SET @CSVfile = N'T:\x.csv'; BULK INSERT [dbo].[TStagingTable] -- FROM N'T:\x.csv' -- This line works FROM @CSVfile -- This line fails WITH ( FIELDTERMINATOR = ',', ROWTERMINATOR = '\n', FIRSTROW = 2 )
エラーメッセージ:
Incorrect syntax near the keyword 'with'.
理由:
BULK INSERT ステートメントの FROM 句には、入力ファイル パスとしてリテラル文字列が必要です。変数を使用する場合は、リテラル文字列にキャストする必要があります。
解決策:
変数 @CSVfile をリテラル文字列にキャストするには、次の動的 T を使用します。 -SQL 構文:
declare @q nvarchar(MAX); set @q= 'BULK INSERT [TStagingTable] FROM '+char(39)+@CSVfile+char(39)+' WITH ( FIELDTERMINATOR = '','', ROWTERMINATOR = ''\n'', FIRSTROW = 1 )' exec(@q)
このコードは、@CSVfile をFROM 句内のリテラル文字列により問題が解決され、一括挿入が成功するようになりました。
以上がT-SQL で一括挿入用に変数を正しくキャストするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。