簡體   English   中英

SQL Server更新觸發器

[英]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中的觸發器對行集而不是單個行進行操作。 您可以通過inserteddeleted偽表訪問它們。 假設您可能希望在先前非活動行處於活動狀態時將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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM