Aracılığıyla paylaş


DML Tetikleyicilerini Değiştirme veya Yeniden Adlandırma

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiMicrosoft Fabric'te SQL veritabanı

Bu makalede, SQL Server Management Studio veya Transact-SQL kullanarak SQL Server'da DML tetikleyicisini değiştirme veya yeniden adlandırma açıklanmaktadır.

Sınırlama

Tetikleyiciyi yeniden adlandırdığınızda, tetikleyici geçerli veritabanında olmalı ve yeni ad tanımlayıcıları için kurallara uymalıdır.

Öneri

Tetikleyiciyi yeniden adlandırmak için sp_rename saklı yordamı kullanmaktan kaçının. Nesne adının herhangi bir bölümünü değiştirmek betikleri ve saklı yordamları bozabilir. Tetikleyicinin yeniden adlandırılması, sys.sql_modules katalog görünümünün tanım sütununda karşılık gelen nesne adının adını değiştirmez. Bunun yerine tetikleyiciyi bırakmanızı ve yeniden oluşturmanızı öneririz.

DML tetikleyicisi tarafından başvuruda bulunan bir nesnenin adını değiştirirseniz, tetikleyiciyi metni yeni adı yansıtabilecek şekilde değiştirmeniz gerekir. Bu nedenle, bir nesneyi yeniden adlandırmadan önce, önerilen değişikliğin tetikleyicileri etkileyip etkilemediğini belirlemek için önce nesnenin bağımlılıklarını görüntüleyin.

DML tetikleyicisi, tanımını şifrelemek için de değiştirilebilir.

Tetikleyicinin bağımlılıklarını görüntülemek için SQL Server Management Studio'yu veya aşağıdaki işlev ve katalog görünümlerini kullanabilirsiniz:

İzinler

DML tetikleyicisini değiştirmek için, tetikleyicinin tanımlandığı tabloda veya görünümde ALTER izni gerekir.

SQL Server Management Studio kullanma

DML tetikleyicisini değiştirme

  1. Nesne Gezginiveritabanı altyapısının bir örneğine bağlanın ve bu örneği genişletin.

  2. İstediğiniz veritabanını genişletin, ardından tablolara genişletin ve değiştirmek istediğiniz tetikleyiciyi içeren tabloyu genişletin.

  3. Tetikleyicileri'ni genişletin, değiştirmek için tetikleyiciye sağ tıklayın ve Değiştiröğesini seçin.

  4. Tetikleyiciyi değiştirin ve ardından Çalıştırseçin.

DML tetikleyicisi yeniden adlandırma

  1. Yeniden adlandırmak istediğiniz DML tetikleyicisini silin veya devre dışı bırakın.
  2. yeni adı belirterekyeni DML tetikleyicisini oluşturun.

Transact-SQL kullanma

ALTER TRIGGER kullanarak tetikleyiciyi değiştirme

  1. Veritabanı Altyapısı'na bağlanın.

  2. Standart çubuğundan Yeni Sorguöğesini seçin.

  3. Aşağıdaki örneği kopyalayıp sorguya yapıştırın. kullanıcı SalesPersonQuotaHistory tablosuna veri eklemeye veya değiştirmeye çalıştığında istemciye kullanıcı tanımlı bir ileti yazdıran bir DML tetikleyicisi oluşturmak için ilk örneği yürütür. ALTER TRIGGER deyimini yürütüp tetikleyiciyi yalnızca INSERT etkinliklerinde çalışacak şekilde değiştirin. Bu tetikleyici, kullanıcıya Compensation bölümünü de bilgilendirmek için bu tabloya satır güncelleştirdiğini veya eklediğini anımsattığı için yararlıdır.

    1. Tetikleyici oluşturma.

      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. Tetikleyiciyi değiştirin.

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

DROP TRIGGER ve CREATE TRIGGER kullanarak tetikleyiciyi yeniden adlandırma

  1. Veritabanı Altyapısı'na bağlanın.

  2. Standart çubuğundan Yeni Sorguöğesini seçin.

  3. Aşağıdaki örneği kopyalayıp sorgu penceresine yapıştırın ve Executeöğesini seçin. Bu örnekte, tetikleyicisini olarak yeniden adlandırmak için Sales.bonus_reminder ve Sales.bonus_reminder_2 deyimleri kullanılır.

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