DROP TRIGGER (Transact-SQL)

从当前数据库中删除一个或多个 DML 或 DDL 触发器。

适用范围:SQL Server(SQL Server 2008 至当前版本),Windows Azure SQL Database(初始版本至当前版本)。

主题链接图标 Transact-SQL 语法约定

语法

-- SQL Server Syntax 

Trigger on an INSERT, UPDATE, or DELETE statement to a table or view (DML Trigger)

DROP TRIGGER [schema_name.]trigger_name [ ,...n ] [ ; ]

Trigger on a CREATE, ALTER, DROP, GRANT, DENY, REVOKE or UPDATE statement (DDL Trigger)

DROP TRIGGER trigger_name [ ,...n ] 
ON { DATABASE | ALL SERVER } 
[ ; ]

Trigger on a LOGON event (Logon Trigger)

DROP TRIGGER trigger_name [ ,...n ] 
ON ALL SERVER 

-- Windows Azure SQL Database Syntax

Trigger on an INSERT, UPDATE, or DELETE statement to a table or view (DML Trigger) 

DROP TRIGGER [schema_name.]trigger_name [ ,...n ] [ ; ] 

Trigger on a CREATE, ALTER, DROP, GRANT, DENY, REVOKE or UPDATE statement (DDL Trigger) 

DROP TRIGGER trigger_name [ ,...n ] 
ON { DATABASE } 
[ ; ] 

参数

  • schema_name
    DML 触发器所属架构的名称。 DML 触发器的作用域是为其创建该触发器的表或视图的架构。 不能为 DDL 或登录触发器指定 schema_name。

  • trigger_name
    要删除的触发器的名称。 若要查看当前创建的触发器的列表,请使用 sys.server_assembly_modulessys.server_triggers

  • DATABASE
    指示 DDL 触发器的作用域应用于当前数据库。 如果在创建或修改触发器时也指定了 DATABASE,则必须指定 DATABASE。

  • ALL SERVER

    适用于:SQL Server 2008 到 SQL Server 2014。

    指示 DDL 触发器的作用域应用于当前服务器。 如果在创建或修改触发器时也指定了 ALL SERVER,则必须指定 ALL SERVER。 ALL SERVER 也适用于登录触发器。

    备注

    此选项在包含的数据库中不可用。

注释

可以通过删除 DML 触发器或删除触发器表来删除 DML 触发器。 删除表时,将同时删除与表关联的所有触发器。

删除触发器时,将从 sys.objectssys.triggerssys.sql_modules 目录视图中删除有关该触发器的信息。

仅当所有触发器均使用相同的 ON 子句创建时,才能使用一个 DROP TRIGGER 语句删除多个 DDL 触发器。

若要重命名触发器,可使用 DROP TRIGGER 和 CREATE TRIGGER。 若要更改触发器的定义,可使用 ALTER TRIGGER。

有关确定特定触发器的依赖关系的详细信息,请参阅 sys.sql_expression_dependenciessys.dm_sql_referenced_entities (Transact-SQL)sys.dm_sql_referencing_entities (Transact-SQL)

有关查看触发器文本的详细信息,请参阅 sp_helptext (Transact-SQL)sys.sql_modules (Transact-SQL)

有关查看现有触发器列表的详细信息,请参阅 sys.triggers (Transact-SQL)sys.server_triggers (Transact-SQL)

权限

若要删除 DML 触发器,要求对要定义触发器的表或视图具有 ALTER 权限。

若要删除定义了服务器范围 (ON ALL SERVER) 的 DDL 触发器或删除登录触发器,需要对服务器拥有 CONTROL SERVER 权限。 若要删除定义了数据库范围 (ON DATABASE) 的 DDL 触发器,要求在当前数据库中具有 ALTER ANY DATABASE DDL TRIGGER 权限。

示例

A.删除 DML 触发器

以下示例将删除 AdventureWorks2012 数据库中的 employee_insupd 触发器。

IF OBJECT_ID ('employee_insupd', 'TR') IS NOT NULL
   DROP TRIGGER employee_insupd;

B.删除 DDL 触发器

以下示例将删除 DDL 触发器 safety。

重要说明重要提示

因为 DDL 触发器不在架构范围内,所以不会在 sys.objects 目录视图中出现,无法使用 OBJECT_ID 函数来查询数据库中是否存在 DDL 触发器。必须使用相应的目录视图来查询架构范围以外的对象。对于 DDL 触发器,可使用 sys.triggers

IF EXISTS (SELECT * FROM sys.triggers
    WHERE parent_class = 0 AND name = 'safety')
DROP TRIGGER safety
ON DATABASE;

请参阅

参考

ALTER TRIGGER (Transact-SQL)

CREATE TRIGGER (Transact-SQL)

ENABLE TRIGGER (Transact-SQL)

DISABLE TRIGGER (Transact-SQL)

EVENTDATA (Transact-SQL)

sp_help (Transact-SQL)

sp_helptrigger (Transact-SQL)

sys.triggers (Transact-SQL)

sys.trigger_events (Transact-SQL)

sys.sql_modules (Transact-SQL)

sys.assembly_modules (Transact-SQL)

sys.server_triggers (Transact-SQL)

sys.server_trigger_events (Transact-SQL)

sys.server_sql_modules (Transact-SQL)

sys.server_assembly_modules (Transact-SQL)

概念

获取有关 DML 触发器的信息