Поделиться через


DROP TRIGGER (Transact-SQL)

Удаляет один или более триггеров DML или DDL из текущей базы данных.

Применимо для следующих объектов: SQL Server (SQL Server 2008 по текущую версию), База данных SQL Windows Azure (С первоначального выпуска по текущий выпуск).

Значок ссылки на раздел Cинтаксические обозначения в 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 ограничивается областью схемы таблицы или представления, для которых они созданы. schema_name не может указываться для триггеров DDL или триггеров входа.

  • trigger_name
    Имя удаляемого триггера. Чтобы просмотреть список только что созданных триггеров, см. sys.server_assembly_modules или sys.server_triggers.

  • DATABASE
    Обозначает область действия триггера DDL в текущей базе данных. Если при создании или изменении триггера был указан аргумент DATABASE, то он должен указываться и далее.

  • ALL SERVER

    Применимо для следующих объектов: С SQL Server 2008 по SQL Server 2014 включительно.

    Обозначает область действия триггера DDL на текущем сервере. Если при создании или изменении триггера был указан аргумент ALL SERVER, то он должен указываться и далее. Параметр ALL SERVER также применяется к триггерам входа.

    Примечание

    Этот параметр недоступен в автономной базе данных.

Замечания

Триггер DML может быть удален напрямую или в результате удаления таблицы триггера. При удалении таблицы удаляются все связанные с ней триггеры.

При удалении триггера соответствующие данные в представлениях каталогов sys.objects, sys.triggers и sys.sql_modules также удаляются.

С помощью инструкции DROP TRIGGER сразу несколько триггеров DDL можно удалить только в том случае, если при их создании были использованы одинаковые предложения ON.

Чтобы переименовать триггер, используйте инструкции DROP TRIGGER и CREATE TRIGGER. Чтобы изменить определение триггера, используйте инструкцию ALTER TRIGGER.

Дополнительные сведения о задании зависимостей для конкретных триггеров см. в разделах sys.sql_expression_dependencies, Функция динамического управления sys.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 для таблицы или представления, в которых определен данный триггер.

Чтобы удалить триггер входа или триггер DDL, определенный в области сервера (ON ALL SERVER), для этого сервера требуется разрешение CONTROL SERVER. Чтобы удалить триггер DDL, определенный в области базы данных (ON DATABASE), необходимо разрешение ALTER ANY DATABASE DDL TRIGGER для текущей базы данных.

Примеры

А.Удаление триггера DML

В следующем примере показано удаление триггера employee_insupd в базе данных AdventureWorks2012.

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

Б.Удаление триггера DDL

В ходе выполнения следующего примера происходит удаление триггера DDL safety.

Важное примечаниеВажно!

Функция OBJECT_ID не может быть использована для выяснения факта существования в базе данных триггеров DDL, так как они не относятся к области схемы и данные о них не заносятся в каталог sys.objects.Запросы на объекты, не относящиеся к области схемы, должны выполняться при помощи соответствующих представлений каталогов.Для триггеров 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_references (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