プロが教えるわが家の防犯対策術!

・環境
WindowsXP Pro
SQL Server2005

はじめまして。

Transact-SQLのBULK INSERTで、エラー(ファイルが存在しない等)が発生した場合に、専用の処理を行いたいと思っています。
※BULK INSERTでエラーが発生したら、リターンコード100を返す等の処理を行いたいと思ってます

私の方で試したのは、BULK INSERTをBEGIN TRYでネストしエラーキャッチを行おうと思いましたがキャッチできず困っております。

以下、質問させてください。
 ・BULK INSERTのエラーはエラーキャッチできないのか?できる場合その方法は?
 ・エラーキャッチできない場合、他の方法でBULK INSERTエラー時の処理を行う方法はあるのか?

お手数ですが、よろしくお願いします。

A 回答 (1件)

ファイルの読み込み時エラーであれば捕捉できるはずですが、ファイル不存在などの場合は、リンクページの「ステートメントレベルの再コンパイルで発生するエラー (コンパイル後の名前の遅延解決により発生するオブジェクト名の解決エラーなど)」に相当するため、捕捉できないのだと思います。



したがって、以下のように動的クエリにすればよいです。
なぜこれだとOKなのかも、リンクページに書いてあります。

DECLARE @sql varchar(max)
BEGIN TRY
SET @sql='BULK INSERT TABLE1 FROM ''C:\AAAAA.txt'' WITH (ROWTERMINATOR=''\n'')'
EXEC (@sql)
END TRY
BEGIN CATCH
SELECT ERROR_NUMBER(),ERROR_MESSAGE()
END CATCH

参考URL:http://technet.microsoft.com/ja-jp/library/ms175 …
    • good
    • 1
この回答へのお礼

早速なご回答ありがとうございます。
上記、ソースで試したところ無事にエラーキャッチする事ができました。

お礼日時:2009/04/10 16:32

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す