Aracılığıyla paylaş


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

See Also

Concepts