Tsql 已删除的表在instead of update触发器中使用
我得到了下面的代码(没有机会问编写它的人),并且不认为删除时需要Tsql 已删除的表在instead of update触发器中使用,tsql,sql-server-2008-r2,Tsql,Sql Server 2008 R2,我得到了下面的代码(没有机会问编写它的人),并且不认为删除时需要内部连接。我错过什么了吗? 我想,删除的表是在中使用的,而不是在delete触发器中使用的。在中代替插入的触发器,不是在中代替更新触发器 CREATE TRIGGER "someTrigger" ON "dbo"."someView" INSTEAD OF UPDATE AS BEGIN INSERT INTO "someOtherTable" ( "id" ,
内部连接。我错过什么了吗?
我想,删除的表是在中使用的,而不是在delete触发器中使用的。在中代替插入的触发器
,不是在中代替更新触发器
CREATE TRIGGER "someTrigger" ON "dbo"."someView"
INSTEAD OF UPDATE
AS
BEGIN
INSERT INTO "someOtherTable"
(
"id"
, "startTime"
, "endTime"
, "duration"
, "resourceId"
, "resourceLocked"
, "timeLocked"
, "groupPrefix"
)
SELECT
"id" = i."id"
, "startTime" = i."startTime"
, "endTime" = i."endTime"
, "duration" = ISNULL( i."duration", 0 )
, "resourceId" = i."resourceId"
, "resourceLocked" = ISNULL( i."resourceLocked", 0 )
, "timeLocked" = ISNULL( i."timeLocked", 0 )
, "groupPrefix" = N'gp'
FROM inserted AS i
INNER JOIN deleted AS d
ON d."id" = i."id"
WHERE ( i."jobType" != 3 )
OR ( i."jobType" = 3 AND i."startTime" != d."startTime" );
END;
在更新触发器中,两个触发器都会被填充<代码>插入
包含新行值,删除
包含旧行值,即执行更新
语句之前的值
这里,它似乎在WHERE
子句中使用:
WHERE ( i."jobType" != 3 )
OR ( i."jobType" = 3 AND i."startTime" != d."startTime" );
因此,如果jobType
为3,我们仅在startTime
已更改时执行插入
需要注意的是,只有在至少一个键的列不需要更新的情况下,才能将插入的和删除的之间的行关联起来。在这里,id
似乎是一个键。希望id
列不需要更新,否则在发生此类更新时,此触发器可能会出现错误。非常感谢!我不知道deleted
也填充在更新触发器中。