Tetikleyicileri ıNSTEAD OF tasarlama
Güncelleştirmeleri destekleyecek şekilde güncelleştirilebilir olmayacaktır görünümleri etkinleştirdiğini ıNSTEAD OF tetikleri birincil avantajlarından birisidir.Birden çok temel tablo s BIR görünüm ekler, güncelleştirmeler ve birden fazla veri başvuru siler desteklemek için bir INSTEAD OF tetikleyicisi kullanmalısınız tablo.Başka bir avantajlarından ıNSTEAD OF tetikleri, bunlar, bir toplu iş parçalarını başarılı olması için bir toplu iş diğer bölümlerini izin vererek sırasında reddedebilir kod mantığı için etkinleştirmenizi birisidir.
Bir INSTEAD OF tetikleyicisi gibi eylemleri gerçekleştirebilirsiniz:
Bir toplu iş parçalarını yoksayılıyor.
Bir toplu iş ve sorunu satırları günlük bir parçası değil işleniyor.
Bir hata durumu oluşursa, başka bir eylem alma.
Not
Bunun YERINE OF DELETE ve ıNSTEAD OF UPDATE Tetikleyicileri üzerinde tanımlanamaz bir tablo bir DELETE veya UPDATE işlemi ardarda kullanarak için tanımlanan yabancı anahtar sahip.
Bu mantık, bir INSTEAD OF tetikleyicisi bir parçası olarak kodlama mantığı reimplement zorunda verilere olan tüm uygulamaları engeller.
Örnek
Içinde aşağıdaki dizisi Transact-SQL ifade, bir INSTEAD OF Tetikleyici iki temel tablodan bir görünümü güncelleştirir. Ayrıca, hataları işlemek için aşağıdaki yaklaşımlardan gösterilir:
Için yinelenen ekler Person Tablo dikkate alınmaz ve ekleme bilgileri kaydediliyor PersonDuplicates TABLO.
Yinelemeler için ekler EmployeeTable Geçerli bilgileri içine alan bir UPDATE deyim içine bırakılacağı EmployeeTable Yinelenen bir anahtar ihlali oluşturmadan.
The Transact-SQL statements create two base tables, a view, a tablo to record errors, and the INSTEAD OF trigger on the view. Aşağıdaki tablolarda, kişisel ve iş verilerini ayrı ve görünümün temel tablolarıdır.
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 tüm ilgili verileri bir kişi için raporlar.
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ı satır eklemek için girişimleri kaydedebilirsiniz.The PersonDuplicates tablo logs the inserted values, the name of the user who tried the insert, and the saat 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ı satır eklemek için girişimleri kaydedilir PersonDuplicates TABLO. Satırda yinelenen EmployeeTable ifadeleri güncelleştirmek için değiştirilir.
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