Sql server 在SQL Server中创建更新触发器
我需要从表A中删除行ID与表B中更新的行ID相同的行。因此,我假设我需要创建一个更新后触发器 例如:如果表B的Sql server 在SQL Server中创建更新触发器,sql-server,Sql Server,我需要从表A中删除行ID与表B中更新的行ID相同的行。因此,我假设我需要创建一个更新后触发器 例如:如果表B的time列中的行ID为1,2,3,则表A应删除行ID为1、2和3的行 这就是我尝试过的: CREATE TRIGGER trgAfterUpdate ON [dbo].[Patients] FOR UPDATE AS DECLARE @row INT SELECT @row = (SELECT RowId FROM Inserted) IF UPDATE
time
列中的行ID为1
,2
,3
,则表A应删除行ID为1、2和3的行
这就是我尝试过的:
CREATE TRIGGER trgAfterUpdate ON [dbo].[Patients]
FOR UPDATE
AS
DECLARE @row INT
SELECT @row = (SELECT RowId FROM Inserted)
IF UPDATE (ModifiedAt)
DELETE FROM dbo.CACHE
WHERE Cache.RowId = @row
GO
然而,若有批处理更新,触发器将只触发一次。如何从
dbo.Cache
中删除rowid与dbo.Patients
中更新的rowid相同的所有行?您可以使用删除。。。从
:
DELETE FROM dbo.Cache FROM dbo.Cache JOIN inserted I ON I.RowId=Cache.id
您必须以基于集合的方式写入触发器,例如
CREATE TRIGGER trgAfterUpdate ON [dbo].[Patients] FOR UPDATE
AS
if update(ModifiedAt)
delete c from dbo.CACHE c INNER JOIN inserted i on i.RowId = c.RowId
GO
inserted
是一个包含所有更新的表;你可以这样使用它
CREATE TRIGGER trgAfterUpdate ON [dbo].[Patients]
FOR UPDATE
AS BEGIN
SET NOCOUNT ON;
IF TRIGGER_NESTLEVEL() > 1 RETURN;
IF UPDATE([ModifiedAt])
DELETE dbo.Cache WHERE RowID IN (SELECT RowID FROM inserted)
END
请注意,我正在使用
SET NOCOUNT ON
来确保触发器不会返回任何额外的结果,并使用trigger\u NESTLEVEL()
检查来防止递归出现问题(这不是单个触发器的问题,但通常是个好主意).它给出了一个错误,说明关键字附近的语法不正确INNER@Simran抱歉-刚刚修正了输入错误。一些示例会很有用。到谢谢。看起来不错。不过,我有一个简短的问题。何时刷新插入表中的值?我问这个问题,我担心意外删除。是否为每个触发器填充值,然后在触发器完成后立即从inserted中删除它应该执行的操作?inserted
中的行仅在触发器执行时存在。如果触发器触发触发自身或另一个触发器(一个非常难控制的场景),那么这些触发器会得到新的