sp_settriggerorder (Transact-SQL)

Изменения: 12 декабря 2006 г.

Указывает триггеры AFTER, срабатывающие первыми или последними. Триггеры AFTER, срабатывающие между первым и последним триггерами, выполняются в неопределенном порядке.

Значок ссылки на разделСинтаксические обозначения в Transact-SQL

Синтаксис

sp_settriggerorder [ @triggername = ] '[ triggerschema. ] triggername' 
        , [ @order = ] 'value' 
        , [ @stmttype = ] 'statement_type' 
        [ , [ @namespace = ] { 'DATABASE' | 'SERVER' | NULL } ]

Аргументы

  • [ @triggername= ] '[ triggerschema**.****] triggername**'**
    Имя триггера, порядок срабатывания которого нужно установить или изменить, и схема, которой он принадлежит, если таковая имеется. [Аргумент triggerschema**.**]triggername имеет тип sysname. Если имя не соответствует триггеру или соответствует триггеру INSTEAD OF, процедура возвращает ошибку. Аргумент triggerschema для триггеров DDL или триггеров входа указать нельзя.
  • [ @order= ] 'value'
    Новый порядок срабатывания для триггера. Аргумент value имеет тип varchar(10) и может принимать любое из следующих значений.

    ms186762.note(ru-ru,SQL.90).gifВажно!
    Первый (First) и последний (Last) триггеры должны быть различными.
    Значение Описание

    First

    Триггер срабатывает первым.

    Last

    Триггер срабатывает последним.

    None

    Порядок срабатывания триггера не определен.

  • [ @stmttype= ] 'statement_type'
    Указывает инструкцию SQL, запускающую триггер. Аргумент statement_type имеет тип varchar(50) и может принимать значения INSERT, UPDATE, DELETE, LOGON или значение любого события инструкции языка Transact-SQL, входящего в список DDL-события, используемые в триггерах DDL. Группы событий задавать нельзя.

    Триггер можно назначить первым (First) или последним (Last) для того или иного типа инструкций только после его определения в качестве триггера данного типа инструкций. Например, триггер TR1 можно назначить первым (First) для инструкции INSERT в таблице T1, если TR1 определен как триггер INSERT. Компонент SQL Server 2005 Database Engine вернет ошибку, если TR1, определенный только как триггер INSERT, устанавливается как первый (First) или последний (Last) триггер для инструкции UPDATE. Дополнительные сведения см. в разделе «Примечания».

  • @namespace= { 'DATABASE' | 'SERVER' | NULL }
    Если аргумент triggername является триггером DDL или триггером входа, указывается, был ли аргумент triggername создан в области базы данных или в области сервера. Обратите внимание, что триггеры входа можно создать только с областью сервера. Дополнительные сведения об области действия триггеров DDL см. в разделе Проектирование триггеров DDL. Если этот параметр не указан или указан равным NULL, то аргумент triggername является триггером DML.

Значения кодов возврата

0 (успешное завершение) и 1 (неуспешное завершение)

Замечания

Для каждой инструкции отдельной таблицы можно установить только один первый (First) и один последний (Last) триггер.

Если для таблицы, базы данных или сервера уже определен первый триггер First, нельзя назначить новый триггер как First для одного и того же типа инструкций statement_type. Это ограничение также применяется к последним триггерам (Last).

При репликации автоматически формируется первый триггер для любой таблицы, включенной в немедленно обновляемую подписку или подписку, обновляемую посредством очередей. Репликация требует, чтобы ее триггер был первым. При попытке вставить таблицу с указанным первым триггером в немедленно обновляемую подписку или подписку, обновляемую посредством очередей, репликация инициирует ошибку. При попытке сделать триггер первым после включения таблицы в подписку процедура sp_settriggerorder вернет ошибку. Если триггер репликации изменяется с помощью инструкции ALTER TRIGGER или в случае, если процедурой sp_settriggerorder его порядок меняется на последний (Last) или отсутствующий (None), подписка будет функционировать неправильно.

Если инструкцией ALTER TRIGGER изменяется первый или последний триггер, изначально установленный этому триггеру атрибут First или Last удаляется, а значение заменяется None. Значение порядка должно быть повторно установлено процедурой sp_settriggerorder.

Если один и тот же триггер необходимо назначить в качестве первого или последнего для нескольких типов инструкций, процедуру sp_settriggerorder необходимо выполнить для каждого типа инструкций. Кроме того, прежде чем триггер может быть назначен в качестве первого (First) или последнего (Last) выполняющегося триггера для того или иного типа инструкций, этот триггер должен быть сначала определен для данного типа.

Разрешения

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

Для установки порядка срабатывания триггера DDL в области базы данных (созданного через ON DATABASE) требуется разрешение ALTER ANY DATABASE DDL TRIGGER.

Для установки порядка срабатывания триггера DML требуется разрешение ALTER на таблицу или представление, для которых этот триггер определен.

Примеры

A. Установка порядка срабатывания триггера DML

На этом примере показано, как указывается, что триггер uSalesOrderHeader должен срабатывать первым после выполнения операции UPDATE над таблицей Sales.SalesOrderHeader.

USE AdventureWorks;
GO
sp_settriggerorder @triggername= 'Sales.uSalesOrderHeader', @order='First', @stmttype = 'UPDATE';

Б. Установка порядка срабатывания триггера DDL

На этом пример показано, как указывается, что триггер ddlDatabaseTriggerLog должен срабатывать первым после события ALTER_TABLE в базе данных AdventureWorks.

USE AdventureWorks;
GO
sp_settriggerorder @triggername= 'ddlDatabaseTriggerLog', @order='First', @stmttype = 'ALTER_TABLE', @namespace = 'DATABASE';

См. также

Справочник

Системные хранимые процедуры (Transact-SQL)
Хранимые процедуры ядра СУБД (Transact-SQL)
ALTER TRIGGER (Transact-SQL)

Справка и поддержка

Получение помощи по SQL Server 2005

Журнал изменений

Версия Журнал

12 декабря 2006 г.

Новое содержимое
  • Добавлены по всему разделу сведения о триггерах входа, введенных в SQL Server 2005 с пакетом обновления 2 (SP2).