0

上拋出抓執行錯誤給一些背景細節,比方說有一個「人」表和存儲過程「PersonPerformance」返回給一個人的表現PERSONID。這兩個對象都駐留在鏈接的sql server 2000實例上。SQL Server 2008中 - 通過一個存儲過程運行鏈接服務器

我的目標是運行每個PERSONID的PersonPerformance proc和結果存儲在駐留在SQL Server 2008實例的表。如果執行存儲過程期間發生執行錯誤,我想說明它'失敗'併發送一封電子郵件,列出存儲過程完成時所有失敗的PersonId。

我使用try..catch塊,並檢查@@ ERROR試過!= 0,但也沒有工作。我假設這是因爲存儲過程在拋出錯誤後繼續執行,並最終返回結果,即使它們無效。存儲過程本身是一個很長的批次,沒有錯誤處理。

下面的代碼我到目前爲止:

{@ReturnTable is defined here} 

declare cur cursor for 
select PersonId from [linked-server-name].DB.dbo.Person 
open cur 
declare @pId int 
fetch next from cur into @pId 
while (@@FETCH_STATUS = 0) 
begin 
    begin try 
     print(@pId) 
     insert into @ReturnTable exec [linked-server-name].DB.dbo.PersonPerformance @pId 
    end try 
    begin catch 
     print('store person that failed here') 
    end catch 

    fetch next from cur into @pId 
end 
close cur 
deallocate cur 

我想我明白爲什麼它不工作,我預計我前面提到的原因(存儲過程持續),但我不知道是否有辦法避免這個問題,並且即使proc繼續,也可以捕獲執行錯誤。

這裏的執行過程中生成的輸出的快照:

101 
The statement has been terminated. 
Msg 2627, Level 14, State 1, Procedure OSPerfAttribution_ps, Line 626 
Violation of PRIMARY KEY constraint '[email protected]__2CD2DAF1'. Cannot insert duplicate key in object '#2BDEB6B8'. 
The statement has been terminated. 
Msg 515, Level 16, State 2, Procedure OSPerfAttribution_ps, Line 1047 
Cannot insert the value NULL into column 'BasketBenchmarkId', table '@ReturnTable'; column does not allow nulls. INSERT fails. 

(3 row(s) affected) 
102 

(36 row(s) affected) 
106 

(32 row(s) affected) 

該錯誤消息是從存儲過程傳播到外部SQL的輸出這一事實使我相信一定會有搭上方式它。我只是很難找到我希望在這裏得到一些幫助。

不得已我可能只需要保存整個輸出到一個日誌文件,然後搜索錯誤。這不是一個選項的壞處,但我仍然想知道是否有辦法在執行過程中捕獲錯誤。

回答

相關問題