2017-01-28 57 views
1

我讀觸發器的一些代碼。SQL Server的觸發器,不允許刪除行

CREATE TRIGGER No_DeleteCustomers 
ON Customers 
INSTEAD OF DELETE 
AS 
    IF @@ROWCOUNT = 0 
     RETURN 

    RAISERROR('No deleting allowed', 11, 1) 

但我很迷茫......不@@ROWCOUNT用於顯示受影響的行數中的最後一條語句...這如何防止我從表中刪除行?

+0

你是正確的,@@ ROWCOUNT用於檢查返回的行數。觸發器中的IF語句將檢查結果是否有零個記錄,然後執行RAISERROR語句。 RAISERROR語句將終止事務並返回消息'不允許刪除'。這是阻止你刪除行的原因。 – MayowaO

+0

我很好奇爲什麼這個觸發器甚至存在。似乎可能拒絕刪除桌面上的特權將是一個更好的主意。 – Xedni

+3

@Xedni當你對於大多數用戶來說是正確的,一些用戶(如SA)不能否認的任何特權,這樣的觸發可以幫助防止系統管理員錯誤地刪除行(當然,沒有什麼能阻止他們從禁用觸發,然後刪除,但這不太可能會被錯誤發生...) –

回答

0

讓我們通過觸發的代碼走行,在一次演示如何工作的:

IF @@ROWCOUNT = 0     -- if the number of rows to be deleted is 0 then... 
    RETURN       -- return 
            -- if still running... 
RAISERROR('No deleting allowed', 11, 1) -- raise an error to the caller 

希望這有助於!