Sql server SQL Server更新触发器

Sql server SQL Server更新触发器,sql-server,triggers,Sql Server,Triggers,我以前从未在SQL server中使用过触发器,我在网上四处查看过,但没有找到问题的答案。基本上,我正在尝试编写一个触发器,该触发器将在表中的记录更新后运行。然后,此触发器将根据第一个表中更新的记录更新另外两个表 带有触发器的主表将使用如下查询更新一条记录: UPDATE E.SM_T_RList SET IsActive = 0 WHERE Guid = @Guid ALTER TRIGGER [E].[IsActiveUpdate] ON [E].[SM_T_RList] AFTER

我以前从未在SQL server中使用过触发器,我在网上四处查看过,但没有找到问题的答案。基本上,我正在尝试编写一个触发器,该触发器将在表中的记录更新后运行。然后,此触发器将根据第一个表中更新的记录更新另外两个表

带有触发器的主表将使用如下查询更新一条记录:

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
然后,我希望触发器执行如下操作:

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获取到触发器中?请帮忙


谢谢,SQL Server中的触发器对行集而不是单个行进行操作。您可以通过插入的和删除的伪表访问这些表。假设您可能希望当以前的非活动行变为活动行时,
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

已经发布的两个答案都有同样的问题——它们将其他行标记为非活动,无论何时在基表上发生任何更新

比如:

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

更合适的做法是

您需要小心使用触发器-您确定这是您想要的吗?是的,基本上,当他们使员工处于非活动状态时,他们会使与该员工相关的附加数据处于非活动状态。