[英]SQL Server Update Trigger
我之前從未在SQL服務器中使用過觸發器,而且我已經在網上查看但是沒有找到我的問題的答案。 基本上我正在嘗試編寫一個觸發器,它將在表中更新記錄后運行。 然后,此觸發器將根據第一個表中更新的記錄更新另外兩個表。
帶有觸發器的主表將使用如下查詢更新一條記錄:
UPDATE E.SM_T_RList
SET IsActive = 0
WHERE Guid = @Guid
然后我想讓觸發器做這樣的事情:
ALTER TRIGGER [E].[IsActiveUpdate]
ON [E].[SM_T_RList]
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
UPDATE E.SM_T_BInfo
SET IsActive = 0
WHERE Guid = @Guid
UPDATE E.SM_T_RMachines
SET IsActive = 0
WHERE GUID = @GUID
END
我希望更新的Guid正在被主表使用。 但我無法弄清楚如何將我希望更新的@Guid更新到觸發器中? 請幫忙。
謝謝
已發布的答案都存在同樣的問題 - 只要基表上發生任何更新,它們就會將其他行標記為非活動狀態
就像是:
ALTER TRIGGER [E].[IsActiveUpdate]
ON [E].[SM_T_RList]
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
UPDATE E.SM_T_BInfo
SET IsActive = 0
WHERE Guid IN (SELECT Guid FROM INSERTED where IsActive=0)
UPDATE E.SM_T_RMachines
SET IsActive = 0
WHERE Guid IN (SELECT Guid FROM INSERTED where IsActive=0)
END
會更合適
SQL Server中的觸發器對行集而不是單個行進行操作。 您可以通過inserted
和deleted
偽表訪問它們。 假設您可能希望在先前非活動行處於活動狀態時將isactive
的值級聯,您可以使用類似這樣的內容。
ALTER TRIGGER [E].[IsActiveUpdate]
ON [E].[SM_T_RList]
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
UPDATE E.SM_T_BInfo
SET IsActive = i.IsActive
FROM INSERTED i JOIN E.SM_T_BInfo e
ON e.Guid = i.Guid
UPDATE E.SM_T_RMachines
SET IsActive = i.IsActive
FROM INSERTED i JOIN E.SM_T_BInfo e
ON e.Guid = i.Guid
END
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.