我有以下觸發:SQL服務器刪除觸發器在同一個表更新多列
CREATE TRIGGER Users_Delete
ON Users
AFTER DELETE
AS
BEGIN
SET NOCOUNT ON;
-- Patients
UPDATE Patients SET ModifiedByID=NULL WHERE ModifiedByID=ID;
UPDATE Patients SET CreatedByID=NULL WHERE CreatedByID=ID;
UPDATE Patients SET DeletedByID=NULL WHERE DeletedByID=ID;
END
我想知道如果有一種方法來「相結合」這三個UPDATE語句到的東西,會像下面:
UPDATE Patients SET
(ModifiedByID=NULL WHERE ModifiedByID=ID) OR
(CreatedByID=NULL WHERE CreatedByID=ID) OR
(DeletedByID=NULL WHERE DeletedByID=ID);
我真的很想只有一個聲明來提高性能。
我使用的觸發而不是在ON DELETE
爲FOREIGN KEY
的原因是因爲我得到的是有一個以上的ON DELETE
導致以下錯誤的錯誤:
Introducing FOREIGN KEY constraint 'FK_Patients_Users_Deleted' on table 'Patients' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.
編輯:那會是不錯的在所有ModifiedByID,CreatedByID,DeletedByID列上都有索引?刪除用戶當然很少見,那麼值得向3列添加索引值得嗎?
令我困擾的是,你正在改變這些數據。最好使用戶失效,而不是刪除與其相關聯的子記錄的用戶。現在,您將無法分辨是誰創建了這個記錄,這可能是非常重要的,特別是當用戶因性能原因而被解僱時。 – HLGEM 2010-06-23 17:21:47
這實際上是一個非常有效的點。我將考慮這一點。 – TheCloudlessSky 2010-06-28 00:04:06