在 SQL Server 中,您可以使用特殊的系统表 inserted
和 deleted
来确定触发器是由 UPDATE 还是 DELETE 操作触发的。
在触发器中,inserted
表包含了插入或更新的行,而 deleted
表包含了删除或更新前的行。通过检查这些表的行数,您可以确定触发器是由 UPDATE 还是 DELETE 操作触发的。
以下是一个示例触发器,它根据操作类型执行不同的操作:
CREATE TRIGGER tr_Example
ON YourTable
AFTER UPDATE, DELETE
AS
BEGIN
DECLARE @Operation VARCHAR(10)
IF EXISTS(SELECT * FROM deleted) AND EXISTS(SELECT * FROM inserted)
BEGIN
SET @Operation = 'UPDATE'
END
ELSE IF EXISTS(SELECT * FROM deleted)
BEGIN
SET @Operation = 'DELETE'
END
ELSE
BEGIN
SET @Operation = 'INSERT'
END
IF @Operation = 'UPDATE'
BEGIN
-- 在此处执行 UPDATE 操作的逻辑
END
ELSE IF @Operation = 'DELETE'
BEGIN
-- 在此处执行 DELETE 操作的逻辑
END
ELSE
BEGIN
-- 在此处执行 INSERT 操作的逻辑
END
END
在这个示例中,触发器会检查 deleted
和 inserted
表中的行数,以确定触发器是由 UPDATE 还是 DELETE 操作触发的。然后,根据操作类型执行相应的逻辑。
请注意,这个示例中的触发器是在 AFTER
触发器上实现的,这意味着它会在 UPDATE 或 DELETE 操作完成后执行。如果您需要在操作发生之前执行某些操作,可以将触发器更改为 INSTEAD OF
触发器。
领取专属 10元无门槛券
手把手带您无忧上云