2011-10-21 67 views
2

我有一個tsql代碼,這基本上是一堆插入和更新語句包裝到一個存儲過程並執行它作爲SP,但如果一個插入失敗,那麼整個SP失敗,那麼是否有更好的方法如果一個插入失敗,繼續執行其餘的代碼。組織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

Yay,很好,但我忘了提到我使用了SQL Server 2000,其中Error_Message看起來不起作用 – EvenPrime