Udostępnij za pośrednictwem


Modyfikowanie lub zmienianie nazwy wyzwalaczy DML

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

W tym artykule opisano sposób modyfikowania lub zmieniania nazwy wyzwalacza DML w programie SQL Server przy użyciu programu SQL Server Management Studio lub Transact-SQL.

Ograniczenia

Po zmianie nazwy wyzwalacza wyzwalacz musi znajdować się w bieżącej bazie danych, a nowa nazwa musi być zgodna z regułami dotyczącymi identyfikatorów .

Zalecenia

Unikaj używania procedury składowanej sp_rename, aby zmienić nazwę wyzwalacza. Zmiana dowolnej części nazwy obiektu może uszkodzić skrypty i procedury składowane. Zmiana nazwy wyzwalacza nie powoduje zmiany nazwy odpowiedniego obiektu w kolumnie definicji widoku katalogu sys.sql_modules. Zalecamy, aby zamiast tego usunąć i ponownie utworzyć wyzwalacz.

Jeśli zmienisz nazwę obiektu, do którego odwołuje się wyzwalacz DML, musisz zmodyfikować wyzwalacz tak, aby jego tekst odzwierciedlał nową nazwę. Dlatego przed zmianą nazwy obiektu najpierw wyświetl zależności obiektu, aby określić, czy proponowana zmiana ma wpływ na jakiekolwiek wyzwalacze.

Wyzwalacz DML można również zmodyfikować w celu zaszyfrowania jego definicji.

Aby wyświetlić zależności wyzwalacza, możesz użyć programu SQL Server Management Studio lub następujących widoków funkcji i wykazu:

Uprawnienia

Aby zmienić wyzwalacz DML, wymagane jest uprawnienie ALTER do tabeli lub widoku, w którym zdefiniowano wyzwalacz.

Korzystanie z programu SQL Server Management Studio

Modyfikowanie wyzwalacza DML

  1. W Eksploratorze obiektów połącz się z instancją aparatu bazy danych, a następnie rozwiń tę instancję.

  2. Rozwiń odpowiednią bazę danych, rozwiń Tabele, a następnie rozwiń tabelę zawierającą wyzwalacz, który chcesz zmodyfikować.

  3. Rozwiń Wyzwalacze, kliknij prawym przyciskiem myszy wyzwalacz, który chcesz zmodyfikować, a następnie wybierz opcję Modyfikuj.

  4. Zmodyfikuj wyzwalacz, a następnie wybierz Wykonaj.

Zmienianie nazwy wyzwalacza DML

  1. usuń lub wyłącz wyzwalacz DML, którego nazwę chcesz zmienić.
  2. Utwórz nowy wyzwalacz DML, określając nową nazwę.

Użyj Transact-SQL

Modyfikowanie wyzwalacza przy użyciu polecenia ALTER TRIGGER

  1. Połącz się z silnikiem bazy danych.

  2. Na pasku standardowym wybierz pozycję Nowe zapytanie.

  3. Skopiuj i wklej poniższy przykład do zapytania. Wykonaj pierwszy przykład, aby utworzyć wyzwalacz DML, który wyświetla klientowi komunikat zdefiniowany przez użytkownika, gdy użytkownik próbuje dodać lub zmienić dane w tabeli SalesPersonQuotaHistory. Wykonaj instrukcję ALTER TRIGGER, aby zmodyfikować wyzwalacz tak, aby był uruchamiany tylko na działaniach INSERT. Ten wyzwalacz jest przydatny, ponieważ przypomina użytkownikowi, że przy aktualizacji lub wstawianiu wierszy do tej tabeli należy także powiadomić dział Compensation.

    1. Utwórz wyzwalacz.

      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. Zmień wyzwalacz.

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

Zmień nazwę wyzwalacza za pomocą DROP TRIGGER i CREATE TRIGGER

  1. Połącz się z silnikiem bazy danych.

  2. Na pasku standardowym wybierz pozycję Nowe zapytanie.

  3. Skopiuj poniższy przykład i wklej go w oknie zapytania, a następnie wybierz pozycję Wykonaj. W tym przykładzie użyto instrukcji DROP TRIGGER i CREATE TRIGGER, aby zmienić nazwę wyzwalacza Sales.bonus_reminder na 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