INSTEAD OF tetikleyicileri tasarlama
INSTEAD OF tetikleyicileri birincil avantajı, bunlar güncelleştirmeleri destekleyecek şekilde güncelleştirilebilir olmayacaktır görünümleri oluşturulabilmesidir.Bir görünümü temel alan birden çok temel tablos kullanmaları gereken bir INSTEAD of tetikleyicisi ekler, güncelleştirmeler ve birden çok veri başvuran siler desteklemek için tablo.Bunlar, bir toplu iş bölümlerini başarılı olması için bir toplu iş diğer bölümlerini izlemesine izin verirken reddetmek kod mantığı için etkinleştirmenizi Tetikleyiciler yerine başka bir avantajı da var.
Bir INSTEAD of tetikleyicisi gibi eylemleri gerçekleştirebilirsiniz:
Bir toplu iş parçalarını göz ardı ediliyor.
Değil bir parçası bir toplu iş iş işleme ve sorun satır günlüğe kaydetme.
Bir hata koşulu oluştuğunda alternatif bir eylem yapma.
Not
YERİNE, delete ve update INSTEAD OF Tetikleyiciler delete veya update eylem basamaklı kullanılarak tanımlanan yabancı anahtar olan bir tablo tanımlanamaz.
Bir INSTEAD of tetikleyicisi bir parçası olarak bu mantık kodlama mantığı reimplement gerek kalmadan veri erişim tüm uygulamaları engeller.
Örnek
Aşağıdaki sıra Transact-SQL ifadeleri, bir INSTEAD OF Tetikleyici güncelleştirmeler iki temel tablolardaki verileri görüntüleyin.Ayrıca, hataları işlemek için aşağıdaki yaklaşımlardan gösterilir:
Çoğaltılmış ekler için Person Tablo dikkate alınmaz ve INSERT bilgileri günlüğe PersonDuplicates tablosu.
Ekler için Çoğaltmalardan oluşan EmployeeTable geçerli bilgileri içine alır bir update deyim içine açık EmployeeTable olmadan üretme bir yinelenen anahtar ihlali.
The Transact-SQL statements create two base tables, a view, a table to record errors, and the INSTEAD OF trigger on the view.Aşağıdaki tablolarda, kişisel ve iş verileri ayırın ve görünüm için temel tablolarda.
CREATE TABLE Person
(
SSN char(11) PRIMARY KEY,
Name nvarchar(100),
Address nvarchar(100),
Birthdate datetime
)
CREATE TABLE EmployeeTable
(
EmployeeID int PRIMARY KEY,
SSN char(11) UNIQUE,
Department nvarchar(10),
Salary money,
CONSTRAINT FKEmpPer FOREIGN KEY (SSN)
REFERENCES Person (SSN)
)
Aşağıdaki iki tablodan ilgili tüm veriler için bir kişi bildirir.
CREATE VIEW Employee AS
SELECT P.SSN as SSN, Name, Address,
Birthdate, EmployeeID, Department, Salary
FROM Person P, EmployeeTable E
WHERE P.SSN = E.SSN
Yinelenen sosyal güvenlik numaraları ile satır eklemek için girişimleri kaydedebilirsiniz.The PersonDuplicates table logs the inserted values, the name of the user who tried the insert, and the time of the insert.
CREATE TABLE PersonDuplicates
(
SSN char(11),
Name nvarchar(100),
Address nvarchar(100),
Birthdate datetime,
InsertSNAME nchar(100),
WhenInserted datetime
)
The INSTEAD OF trigger inserts rows into multiple base tables from a single view.Yinelenen sosyal güvenlik numaraları ile satır eklemek için girişimleri olarak kaydedildiyse PersonDuplicates tablo.Yinelenen satırları EmployeeTable Update değiştideyimleri.
CREATE TRIGGER IO_Trig_INS_Employee ON Employee
INSTEAD OF INSERT
AS
BEGIN
SET NOCOUNT ON
-- Check for duplicate Person. If there is no duplicate, do an insert.
IF (NOT EXISTS (SELECT P.SSN
FROM Person P, inserted I
WHERE P.SSN = I.SSN))
INSERT INTO Person
SELECT SSN,Name,Address,Birthdate
FROM inserted
ELSE
-- Log an attempt to insert duplicate Person row in PersonDuplicates table.
INSERT INTO PersonDuplicates
SELECT SSN,Name,Address,Birthdate,SUSER_SNAME(),GETDATE()
FROM inserted
-- Check for duplicate Employee. If no there is duplicate, do an INSERT.
IF (NOT EXISTS (SELECT E.SSN
FROM EmployeeTable E, inserted
WHERE E.SSN = inserted.SSN))
INSERT INTO EmployeeTable
SELECT EmployeeID,SSN, Department, Salary
FROM inserted
ELSE
--If there is a duplicate, change to UPDATE so that there will not
--be a duplicate key violation error.
UPDATE EmployeeTable
SET EmployeeID = I.EmployeeID,
Department = I.Department,
Salary = I.Salary
FROM EmployeeTable E, inserted I
WHERE E.SSN = I.SSN
END