我有一个包含几个表的数据库:tab1、tab2、tab3。如何在删除表上创建 DDL 触发器 仅适用于 tab2 (不适用于 tab1 和 tab3)。当drop tab2
被称为我需要更新此表中的值但不删除 tab2。我怎样才能做到这一点?我发现了这个,但不明白它是如何工作的:
create trigger trDatabse_OnDropTable
on database
for drop_table
as
begin
set nocount on;
select
'Table dropped: ' +
quotename(eventdata().value('(/EVENT_INSTANCE/SchemaName)[1]', 'sysname')) + N'.' +
quotename(eventdata().value('(/EVENT_INSTANCE/ObjectName)[1]', 'sysname'));
end;
谢谢!
最佳答案
您可以使用 ddl 触发器防止删除表。就像是:
CREATE TRIGGER drop_safe
ON DATABASE
FOR DROP_TABLE
AS
PRINT 'You must disable Trigger "drop_safe" to drop table!'
ROLLBACK
;
为了仅防止对您指定的表进行删除,您必须仅在这种特殊情况下查看 eventdata() 和 ROLLBACK。
关于sql-server - 删除表上的 SQL Server DDL 触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22312351/