【发布时间】:2016-02-24 09:09:36
【问题描述】:
如果我使用示例中的INSTEAD OF DELETE 触发器,这是否适用于我已删除记录的每一行,还是我必须指定它?如果没有,我该怎么办?使用 select distinct ?谢谢你:)
ALTER TRIGGER "rdowner"."TriggerDelete" ON "rdowner"."V_MyTable"
INSTEAD OF DELETE
AS
BEGIN TRY
DECLARE @idActivity INT
SELECT @idActivity = rdowner.V_MyTable.Id,
FROM deleted
BEGIN
myDeleteRoutine
END
END TRY
BEGIN CATCH
SELECT
ERROR_NUMBER() AS ErrorNumber,
ERROR_SEVERITY() AS ErrorSeverity,
ERROR_STATE() as ErrorState,
ERROR_PROCEDURE() as ErrorProcedure,
ERROR_LINE() as ErrorLine,
ERROR_MESSAGE() as ErrorMessage
END CATCH
我的触发器需要将每个已删除行的@idActivity、时间戳和 varchar 变量记录到另一个表中
【问题讨论】:
-
SQL Server 触发器 NEVER “在每一行上”工作 - 每个语句都调用它们 ONCE,所以如果您的
DELETE语句删除 50 行,您的触发器称为 ONCE,Deleted伪表包含 50 行,您需要以 基于集合的方式处理这些行 -
是的。编写触发器并且不知道绝对基础。拜托,你可以做得更好。
-
@marc_s 非常感谢 marc,这对我有帮助!
-
@TomTom 我会做得更好,这只是因为我看到甲骨文代码使用 for each row 这就是为什么我想知道是否有办法做到这一点,反正我是只是一个初学者。
-
如果您搜索“每行的 SQL Server 触发器”,您会找到很多答案。顺便说一句,您的触发器不使用
deleted表
标签: sql-server triggers sql-server-2012