2011-10-21 9 views
2

私はtsqlコードを持っています。これは、基本的にはストアドプロシージャにラップされ、SPとして実行する挿入文と更新文の束ですが、一方の挿入が失敗するとSP全体が失敗するので、 1つの挿入が失敗した場合に残りのコードを実行し続けるSQLバッチステートメントを整理する

Create SP As 
{ 
insert into Table A 
-- 
-- 

insert into Table B 
-- 
-- 

Insert into Table C 
-- 
} 

答えて

3

たぶん、あなたはTRYのCATCHブロック内のすべての挿入命令を囲むことができ

DECLARE @Errors TABLE(
Instruction VARCHAR(MAX), 
Error VARCHAR(MAX) 
) 

BEGIN TRY 
INSERT INTO TABLE A 
END TRY 
BEGIN CATCH 
INSERT INTO @Errors VALUES ('TABLE A', ERROR_MESSAGE()) 
END CATCH 

BEGIN TRY 
INSERT INTO TABLE B 
END TRY 
BEGIN CATCH 
INSERT INTO @Errors VALUES ('TABLE B', ERROR_MESSAGE()) 
END CATCH 

--.... 

SELECT * FROM @Errors 

・ホープ、このことができます:

コードは次のようなものです。

+0

ありがとう、確かに私が望んでいた何かのように見えるが、それは問題の子供を意味するだろうか、問題をケイングしているテーブルの名前! – EvenPrime

+0

もちろんスクリプトの終わりに@Errors変数を参照して、失敗した命令や関連するエラーを調べることができます – Ginka

+0

よかったですが、私はSQL Server 2000を使用していることを忘れていましたが、Error_Messageは動作しません – EvenPrime