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


Изменение или переименование триггеров DML

Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure

В этой статье описывается изменение или переименование триггера DML в SQL Server с помощью SQL Server Management Studio или Transact-SQL.

Ограничения

Во время переименования триггер должен находиться в текущей базе данных, а новое имя должно удовлетворять правилам для идентификаторов.

Рекомендации

Избегайте использования хранимой процедуры sp_rename для переименования триггера. Изменение любой части имени объекта может разрушить скрипты и хранимые процедуры. Переименование триггера не изменяет имя соответствующего имени объекта в столбце определения представления каталога sys.sql_modules . Вместо этого мы рекомендуем удалить триггер и снова создать его.

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

Кроме того, триггер DML можно изменить, чтобы зашифровать его определение.

Чтобы просмотреть зависимости триггера, можно использовать SQL Server Management Studio или следующие представления функций и каталогов:

Разрешения

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

Использование SQL Server Management Studio

Изменение триггера DML

  1. В обозреватель объектов подключитесь к экземпляру ядро СУБД, а затем разверните этот экземпляр.

  2. Разверните нужную базу данных, разверните узел Таблицы, а затем разверните таблицу, которая содержит изменяемый триггер.

  3. Разверните триггеры, щелкните триггер правой кнопкой мыши, чтобы изменить, и нажмите кнопку "Изменить".

  4. Измените триггер и нажмите кнопку "Выполнить".

Переименование триггера DML

  1. Удалите или отключите триггер DML, который требуется переименовать.
  2. Создайте новый триггер DML, указав новое имя.

Использование Transact-SQL

Изменение триггера с помощью ALTER TRIGGER

  1. Соединитесь с ядром СУБД .

  2. На стандартной панели выберите пункт Создать запрос.

  3. Скопируйте следующий пример в запрос. Выполните первый пример, чтобы создать триггер DML, который выводит на клиент определяемое пользователем сообщение, когда пользователь пытается добавить или изменить данные в таблице SalesPersonQuotaHistory . Выполните инструкцию ALTER TRIGGER , чтобы изменить триггер так, чтобы он срабатывал только на операции INSERT . Этот триггер полезен, так как он напоминает пользователям, что при обновлениях и вставках строк в эту таблицу необходимо направить уведомление в отдел Compensation.

    1. Создание триггера.

      USE AdventureWorks2022;
      GO
      
      IF OBJECT_ID(N'Sales.bonus_reminder', N'TR') IS NOT NULL
          DROP TRIGGER Sales.bonus_reminder;
      GO
      
      CREATE TRIGGER Sales.bonus_reminder
          ON Sales.SalesPersonQuotaHistory WITH ENCRYPTION
          AFTER INSERT, UPDATE
      AS RAISERROR ('Notify Compensation', 16, 10);
      GO
      
    2. Измените триггер.

      USE AdventureWorks2022;
      GO
      ALTER TRIGGER Sales.bonus_reminder
      ON Sales.SalesPersonQuotaHistory
      AFTER INSERT
      AS RAISERROR ('Notify Compensation', 16, 10);
      GO
      

Переименование триггера с помощью DROP TRIGGER и ALTER TRIGGER

  1. Соединитесь с ядром СУБД .

  2. На стандартной панели выберите пункт Создать запрос.

  3. Скопируйте приведенный ниже пример в окно запроса и нажмите кнопку Выполнить. В этом примере инструкции DROP TRIGGER и CREATE TRIGGER используются для переименования триггера Sales.bonus_reminder Sales.bonus_reminder_2в .

USE AdventureWorks2022;
GO

IF OBJECT_ID(N'Sales.bonus_reminder', N'TR') IS NOT NULL
    DROP TRIGGER Sales.bonus_reminder;
GO

CREATE TRIGGER Sales.bonus_reminder_2
    ON Sales.SalesPersonQuotaHistory WITH ENCRYPTION
    AFTER INSERT, UPDATE
AS RAISERROR ('Notify Compensation', 16, 10);
GO