我在表中刪除觸發器,用於從另一個數據庫的表中刪除條目。SQL Server刪除觸發器 - 涉及刪除行或標記爲刪除的行的行句柄
CREATE TRIGGER [dbo].[Trigger_Contracts_Delete] ON [dbo].[Contracts]
AFTER DELETE NOT FOR REPLICATION
AS
IF @@ROWCOUNT = 0 RETURN
DELETE seconddb.dbo.second_table
WHERE contractId IN (SELECT d.ContractID FROM deleted d)
當我用我的應用程序(傳統的應用程序沒有什麼瞭解其內部),我得到的錯誤刪除記錄「行控稱已刪除的行或列標記爲刪除」
然而,當我修改此觸發器以在刪除之前添加額外的選擇語句(SELECT d.ContractID FROM deleted d
)。我沒有收到錯誤消息。當選擇語句被添加時,它可以工作的原因是什麼,通過發出「已刪除」選擇我已經鎖定了「已刪除」表? 它可以發出
CREATE TRIGGER [dbo].[Trigger_Contracts_Delete] ON [dbo].[Contracts]
AFTER DELETE NOT FOR REPLICATION
AS
IF @@ROWCOUNT = 0 RETURN
SELECT d.ContractID FROM deleted d;
DELETE seconddb.dbo.second_table
WHERE contractId IN (SELECT d.ContractID FROM deleted d)
seconddb.dbo.secondtable是否存在觸發器。通常,在嘗試從未提交事務中的表中引用行時發生此錯誤。只是想一想,嘗試添加一個NOLOCK提示到IN(SELECT d.ContractID FROM deleted d) – Sparky 2009-11-20 11:27:01
感謝Sparky。以下是更多詳細信息 seconddb.dbo.second_table有一個子表seconddb.dbo.second_table_child,它具有級聯刪除關係[如果seconddb.dbo.second_table中的父記錄被刪除,seconddb.dbo.second_table_child中的子記錄將被刪除。 ]。 seconddb.dbo.second_table_child上有一個刪除觸發器,用於刪除seconddb.dbo.second_table_child中的一行時,更新seconddb.dbo.second_table中的父記錄。 – vijayp 2009-11-20 14:57:10
您是否找到了解決方案? – 2010-05-26 00:32:18