2014-01-22 39 views
0

我試圖創建一個觸發器,它會插入一些數據到一個表上linkedserver在MS SQL 2012年我希望能夠以檢查服務器連接處於活動狀態,如果連接檢查它不是那麼我想在其他地方記錄消息,但不能中止整個事務並回滾。我想要啓動觸發器的查詢繼續。的Sql女士入住linkedserver從觸發

我試過這裏描述的方法 How to test linkedserver's connectivity in TSQL 這樣做的工作,但錯誤仍然拋出,我的事務回滾消息。觸發器執行過程中引發

錯誤。該批次已被中止,並且用戶事務(如果有的話)已被回滾。

將引發錯誤的涉及擊落linkedserver導致回滾無論在CATCH表裏如一,不阻止任何事情。

例觸發:

CREATE TRIGGER [dbo].[TEST1_TRG] 
    ON [dbo].[Test1] 
    AFTER INSERT,DELETE,UPDATE 
AS 
BEGIN 
    SET NOCOUNT ON; 

    declare @srvr nvarchar(128), @retval int; 
    set @srvr = 'loopback'; 
    begin try 
     exec @retval = sys.sp_testlinkedserver @srvr; 
    end try 
    begin catch 
     set @retval = sign(@@error); 
    end catch; 
    print @retval 
END 

回答

0

好的嘗試這種

-- All your Code 

BEGIN TRY 
-- place Query which fires the trigger Here 
END TRY 
BEGIN CATCH 
    -- Check for the trigger error and if it is trigger error 
    -- do nothing 
    -- else raise an error 
END CATCH 

-- The subsequenet Code 

現在catch塊將得到錯誤,但會出現在catch塊沒有代碼,它會去以後碼。

+0

我無法控制調用查詢,它們可以來自任何地方。所以我真的只能在我的觸發器內工作。 – GimpArm