【发布时间】:2021-12-24 12:06:36
【问题描述】:
是否可以在您尝试删除行时运行这样的触发器并打印如下内容:“尝试删除行 ROW_ID”,而不是实际删除行?
UPD:谢谢。为我工作:
GO
CREATE OR ALTER TRIGGER Trigger_2 ON Authors
INSTEAD OF DELETE
AS BEGIN
DECLARE @deleted_id INT;
DECLARE cursor_deleted CURSOR
FOR SELECT au_id FROM deleted;
OPEN cursor_deleted;
FETCH NEXT FROM cursor_deleted INTO @deleted_id;
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT('Attempting to delete author ' + STR(@deleted_id));
FETCH NEXT FROM cursor_deleted INTO @deleted_id;
END;
CLOSE cursor_deleted;
DEALLOCATE cursor_deleted;
END;
GO
DELETE FROM Authors WHERE au_id BETWEEN 1 AND 10;
【问题讨论】:
-
触发器绝不应该尝试使用 PRINT 与生产环境中的进程或用户进行通信。简单地“忽略”插入行的尝试是一种冒险的设计。尝试此插入的进程只会知道它正常工作,并将根据该“知识”继续执行。
标签: sql-server tsql triggers