Aracılığıyla paylaş


DML tetikleyicileri

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

DML tetikleyicisi, tetikleyicide tanımlanan tabloyu veya görünümü etkileyen bir veri işleme dili (DML) olayı gerçekleştiğinde otomatik olarak etkili olan özel bir saklı yordam türüdür. DML olayları INSERT, UPDATE veya DELETE deyimlerini içerir. DML tetikleyicileri iş kurallarını ve veri bütünlüğünü zorlamak, diğer tabloları sorgulamak ve karmaşık Transact-SQL deyimleri eklemek için kullanılabilir. Tetikleyici ve tetikleyen deyim, tetikleyicinin içinden geri alınabilen tek bir işlem olarak kabul edilir. Ciddi bir hata algılanırsa (örneğin, yetersiz disk alanı), tüm işlem otomatik olarak geri alınır.

Fayda -ları

DML tetikleyicileri, varlık bütünlüğünü veya etki alanı bütünlüğünü zorlayabilecekleri kısıtlamalara benzer. Genel olarak, varlık bütünlüğü her zaman, kısıtlamaların bir parçası olan PRIMARY KEY ve UNIQUE veya kısıtlamalardan bağımsız olarak oluşturulan dizinler tarafından en düşük düzeyde zorlanmalıdır. Alan bütünlüğü CHECK kısıtlamaları aracılığıyla uygulanmalı ve ilişkisel bütünlük (RI) FOREIGN KEY kısıtlamaları aracılığıyla zorlanmalıdır. DML tetikleyicileri en çok kısıtlamalar tarafından desteklenen özellikler uygulamanın işlevsel gereksinimlerini karşılayamıyorsa yararlıdır.

Aşağıdaki liste, DML tetikleyicilerini kısıtlamalarla karşılaştırır ve DML tetikleyicilerinin kısıtlamalara göre ne zaman avantajları olduğunu tanımlar.

  • DML tetikleyicileri, veritabanındaki ilgili tablolar aracılığıyla değişiklikleri art arda ekleyebilir; ancak, bu değişiklikler art arda bilgi tutarlılığı kısıtlamaları kullanılarak daha verimli bir şekilde yürütülebilir. FOREIGN KEY kısıtlamalar, REFERENCES yan tümcesi basamaklı bir referans eylemi tanımlamadığı sürece, sütun değerini sadece başka bir sütundaki değerle tam eşleşmeyle doğrulayabilir.

  • Kötü amaçlı veya yanlış INSERT, UPDATE ve DELETE işlemlerine karşı koruma sağlayabilir ve CHECK kısıtlamalarla tanımlanandan daha karmaşık diğer kısıtlamaları zorunlu kılabilir.

    Kısıtlamalardan farklı olarak CHECK , DML tetikleyicileri diğer tablolardaki sütunlara başvurabilir. Örneğin bir tetikleyici, eklenen veya güncelleştirilen verilerle karşılaştırmak ve verileri değiştirme veya kullanıcı tanımlı bir hata iletisi görüntüleme gibi başka eylemler gerçekleştirmek için başka bir tablodan bir tablo kullanabilir SELECT .

  • Bir veri değişikliğinden önce ve sonra tablonun durumunu değerlendirebilir ve bu farka göre eylemler gerçekleştirebilirler.

  • Tablodaki aynı türde (INSERT, UPDATE, veya DELETE) birden çok DML tetikleyicisi, aynı değişiklik deyimine yanıt olarak birden çok farklı eylemin gerçekleştirilebilmesini sağlar.

  • Kısıtlamalar yalnızca standartlaştırılmış sistem hata iletileri aracılığıyla hatalar hakkında iletişim kurabilir. Uygulamanız özelleştirilmiş iletileri ve daha karmaşık hata işlemeyi gerektiriyorsa veya bu iletilerden yararlanabiliyorsa, bir tetikleyici kullanmanız gerekir.

  • DML tetikleyicileri bilgi tutarlılığını ihlal eden değişikliklere izin verebilir veya geri alabilir, böylece veri değişikliği girişimi iptal edilebilir. Böyle bir tetikleyici, yabancı anahtarı değiştirdiğinizde ve yeni değer birincil anahtarıyla eşleşmediğinde geçerli olabilir. Ancak, FOREIGN KEY kısıtlamalar genellikle bu amaç için kullanılır.

  • Tetikleyici tablosunda kısıtlamalar varsa, INSTEAD OF tetikleyici yürütüldükten sonra ancak AFTER tetikleyici yürütülmeden önce denetlenirler. Kısıtlamalar ihlal edilirse tetikleyici INSTEAD OF eylemleri geri alınır ve AFTER tetikleyici yürütülemez.

DML tetikleyicisi türleri

AFTER tetikleyicisi

AFTER tetikleyicileri, INSERT, UPDATE, MERGE veya DELETE deyiminin eylemi gerçekleştirildikten sonra yürütülür. AFTER bir kısıtlama ihlali oluşursa tetikleyiciler hiçbir zaman yürütülemez. Bu nedenle, bu tetikleyiciler kısıtlama ihlallerini önleyebilecek herhangi bir işlem için kullanılamaz. Bir deyimde INSERT belirtilen her UPDATE, DELETEveya MERGE eylemi için, her DML işlemi için karşılık gelen tetikleyici tetiklenir.

Tetikleyici YERINE

INSTEAD OF tetikleyiciler tetikleyici deyiminin standart eylemlerini geçersiz kılar. Bu nedenle, bunlar bir veya daha fazla sütunda hata veya değer denetimi gerçekleştirmek ve satır veya satırları eklemeden, güncelleştirmeden veya silmeden önce başka eylemler gerçekleştirmek için kullanılabilir. Örneğin, bir bordro tablosundaki saatlik ücret sütununda güncelleştirilen değer belirtilen değeri aştığında, bir hata iletisi oluşturup işlemi geri almak veya kaydı bordro tablosuna eklemeden önce denetim kaydına yeni bir kayıt eklemek için bir tetikleyici tanımlanabilir. Tetikleyicilerin INSTEAD OF birincil avantajı, güncelleştirmeleri desteklemek için güncelleştirilemez görünümleri etkinleştirmeleridir. Örneğin, birden çok temel tabloya dayanan bir görünüm, birden fazla tablodaki verilere başvuran ekleme, güncelleme ve silmeleri desteklemek için INSTEAD OF tetikleyicisini kullanmalıdır. Tetikleyicilerin INSTEAD OF bir diğer avantajı, bazı toplu iş bölümlerini reddedebilen mantık kodlarken diğer bölümlerin başarılı olmasını sağlamaktır.

Bu tablo, AFTER ve INSTEAD OF tetikleyicilerinin işlevselliğini karşılaştırır.

İşlev AFTER tetikleyicisi INSTEAD OF tetikleyicisi
Uygulanabilirlik Tablolar Tablolar ve görünümler
Tablo veya görünüm başına miktar Tetikleyici başına birden çok eylem (UPDATE, DELETEve INSERT) Her tetikleme eylemi için bir adet (UPDATE, DELETE, ve INSERT)
Kademeli referanslar Hiçbir kısıtlama uygulanmaz INSTEAD OF UPDATE ve DELETE tetikleyicilerine, basamaklı bilgi tutarlılığı kısıtlamalarının hedefi olan tablolarda izin verilmez.
İdam Sonra:

Kısıtlama işleme

Bildirimsel başvuru eylemleri

inserted ve deleted tablo oluşturma

Tetikleme eylemi
Önce: Kısıtlama işleme

Yerine: Tetikleyici Hareket

Sonra: inserted ve deleted tablo oluşturma
Yürütme sırası İlk ve son yürütme belirtilebilir Uygulanamaz
varchar(max), nvarchar(max) ve varbinary(max) sütun başvuruları inserted ve deleted tablolarında İzin Verilir İzin Verilir
metin, ntext ve görüntü sütunu başvuruları inserted ve deleted tablolarında İzin verilmiyor İzin Verilir

CLR tetikleyicisi

Ortak dil çalışma zamanı (CLR) tetikleyicisi bir AFTER veya INSTEAD OF tetikleyicisi olabilir. CLR tetikleyicisi bir Veri Tanımı Dili (DDL) tetikleyicisi de olabilir. CLR tetikleyicisi, Transact-SQL saklı yordamı yürütmek yerine .NET Framework'te oluşturulan ve SQL Server'a yüklenen bir derlemenin üyesi olan yönetilen kodda yazılmış bir veya daha fazla yöntemi yürütür.

Görev Makale
DML tetikleyicisi oluşturmayı açıklar. DML tetikleyicileri oluşturma
CLR tetikleyicisi oluşturmayı açıklar. CLR tetikleyicileri oluşturma
Hem tek satırlı hem de çok satırlı veri değişikliklerini işlemek için DML tetikleyicisi oluşturmayı açıklar. Birden Çok Veri Satırını İşleyecek DML Tetikleyicileri Oluşturma
Tetikleyicilerin nasıl iç içe yerleştirileceğini açıklar. İç İçe Tetikleyiciler Oluşturma
AFTER tetikleyicilerinin tetiklenme sıralarının nasıl belirtileceğini açıklar. İlk ve Son Tetikleyicileri Belirtme
Tetikleyici kodunda özel eklenen ve silinen tabloların nasıl kullanılacağını açıklar. Eklenen ve silinen tabloları kullanma
DML tetikleyicisini değiştirme veya yeniden adlandırmayı açıklar. DML Tetikleyicilerini Değiştirme veya Yeniden Adlandırma
DML tetikleyicileri hakkındaki bilgilerin nasıl görüntüleyebileceğinizi açıklar. DML Tetikleyicileri Hakkında Bilgi Alma
DML tetikleyicilerinin nasıl silineceğini veya devre dışı bırakacağınız açıklanır. DML Tetikleyicilerini Silme veya Devre Dışı Bırakma
Tetikleyici güvenliğinin nasıl yönetileceğini açıklar. Tetikleyici güvenliğini yönetme