ホームページ >データベース >mysql チュートリアル >T-SQL で一括挿入用に変数を正しくキャストするにはどうすればよいですか?

T-SQL で一括挿入用に変数を正しくキャストするにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-21 04:36:10223ブラウズ

How to Correctly Cast Variables for Bulk Inserts in T-SQL?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。