Aracılığıyla paylaş


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

Ayrıca bkz.

Kavramlar