Aracılığıyla paylaş


INSTEAD OF INSERT Tetikleyicilerini

INSTEAD OF INSERT Tetikleyicilerini bir görünüm veya tablo standart koymak tanımlanabilir eylem INSERT deyim.Genellikle, bir görünümde bir veya daha fazla temel tabloları veri eklemek için INSTEAD OF INSERT tetikleyici tanımlanmış.

Görünüm Seç listesinde sütunlar null veya not NULL olabilir.Görünümü sütun boş değerlere izin vermez, INSERT deyim sütun için değerler sağlamanız gerekir.Görünüm sütuns, boş değerlere izin görünümü tanımlayan ifade sütun aşağıdaki öğeleri içerir:

  • Boş değerlere izin veren herhangi bir temel tablo sütun başvuruları

  • Aritmetik işleçler

  • İşlev başvurularını

  • Büyük/küçük harf ya da alt ifade null ile birleşim

  • NULLIF

Kullanabileceğiniz AllowsNull özellik görünümü sütun boş değerlere izin verip vermediğini belirlemek için columnproperty işlev tarafından bildirdi.The sp_help stored procedure also reports which view columns allow nulls.

Bir INSTEAD OF INSERT tetikleyici olan bir görünüme başvuran bir INSERT deyim boş değerlere izin vermez her görünümü sütun değerlerini sağlamanız gerekir.Bu sütunlara başvuru görünümünde sütunları içeren temel tablo için giriş değerleri belirtilemez, gibi:

  • Hesaplanan sütunlar içinde temel tablo.

  • Kimlik sütunları kimlik Ekle kapalı olduğu temel tablo içinde.

  • Temel tablo sütunları ile timestamp veri türü.

Görünüm INSTEAD OF INSERT tetikleyici INSERT karşı temel tablo verileri kullanarak üretir, eklenen tablo gerekir gözardı sütunların bu türleri için değerler sütunları INSERT deyim seçme listesinde ekleyerek değil.INSERT deyim sütunların bu türleri için göstermelik değerleri oluşturabilir.

Örneğin, bir INSERT deyim, bir kimlik veya hesaplanan sütun temel tablo içinde bir görünüm sütun için bir değer belirtmeniz gerekir, ancak bir yer tutucu değer sağlayabilir.INSTEAD of tetikleyici INSERT deyim içine değerleri ekler oluşturduğunda sağlanan değer göz ardı edebilirsiniz temel tablo.

Aşağıdaki tablo, görünüm ve işlemi göstermek tetikleyici oluşturun:

CREATE TABLE BaseTable
  (PrimaryKey     int PRIMARY KEY IDENTITY(1,1),
   Color          nvarchar(10) NOT NULL,
   Material       nvarchar(10) NOT NULL,
   ComputedCol AS (Color + Material)
  )
GO

--Create a view that contains all columns from the base table.
CREATE VIEW InsteadView
AS SELECT PrimaryKey, Color, Material, ComputedCol
FROM BaseTable
GO

--Create an INSTEAD OF INSERT trigger on the view.
CREATE TRIGGER InsteadTrigger on InsteadView
INSTEAD OF INSERT
AS
BEGIN
  --Build an INSERT statement ignoring inserted.PrimaryKey and 
  --inserted.ComputedCol.
  INSERT INTO BaseTable
       SELECT Color, Material
       FROM inserted
END
GO

Bir INSERT deyim başvuran doğrudan BaseTable için bir değer sağlayamıyor PrimaryKey ve ComputedCol sütunlar.Örneğin:

--A correct INSERT statement that skips the PrimaryKey and ComputedCol columns.
INSERT INTO BaseTable (Color, Material)
       VALUES (N'Red', N'Cloth')

--View the results of the INSERT statement.
SELECT PrimaryKey, Color, Material, ComputedCol
FROM BaseTable

--An incorrect statement that tries to supply a value for the 
--PrimaryKey and ComputedCol columns.
INSERT INTO BaseTable
       VALUES (2, N'Green', N'Wood', N'GreenWood')

Ancak, bir INSERT deyim başvuran InsteadView için bir değer sağlamanız gerekir PrimaryKey ve ComputedCol:

--A correct INSERT statement supplying dummy values for the 
--PrimaryKey and ComputedCol columns.
INSERT INTO InsteadView (PrimaryKey, Color, Material, ComputedCol)
       VALUES (999, N'Blue', N'Plastic', N'XXXXXX')
--View the results of the INSERT statement.
SELECT PrimaryKey, Color, Material, ComputedCol
FROM InsteadView

The inserted table passed to InsteadTrigger is built with a nonnullable PrimaryKey and ComputedCol column; therefore, the INSERT statement that is referencing the view must supply a value for those columns.Değerleri 999 ve N'XXXXXX' geçirilir için InsteadTrigger, ama INSERT deyim tetikleyici içinde değil seçin ya da inserted.PrimaryKey veya inserted.ComputedCol; Bu nedenle, bu değerler göz ardı edilir.Aslında eklenen satır BaseTable olan 2 , PrimaryKey ve N'BluePlastic' , ComputedCol.

Bulunan değerler eklenen , kimlik, hesaplanan için tablo ve timestamp sütunları farklı için INSTEAD of tetikleyicileri INSTEAD OF INSERT Tetikleyiciler belirtilen tablolarda karşılaştırması üzerinde belirtilen görünümler.

Temel tablo sütun

Değer eklenen tablo üzerinde herhangi INSERT tetikleyici içinde birtablo

Değer eklenen tablo içinde bir görünüm INSTEAD OF INSERT tetikleyicisi

hesaplanan sütun bulunur.

Hesaplanmış ifade

Kullanıcı tarafından belirtilen değeri veya boş

KİMLİK özellik vardır.

IDENTITY_INSERT off, ise IDENTITY_INSERT on ise 0 belirtilen değer

Kullanıcı tarafından belirtilen değeri veya boş

Olan bir timestamp veri türü.

Sütunu, boş değerlere izin vermez, ikili sıfırları null sütun null değerlere izin veriyorsa

Kullanıcı tarafından belirtilen değeri veya boş

Varsayılan tanımını da olan not null sütun değerlerini sağlamak bir temel tablo doğrudan başvuran INSERT deyim yok.INSERT deyim bir değer sağlamazsa, varsayılan değer kullanılır.Ancak, bir not null sütun varsayılan tanımını içeren bir INSTEAD OF INSERT tetikleyici görünümünde basit bir deyim tarafından başvurulan, görünüme başvuran herhangi bir INSERT deyim sütun için bir değer sağlamalısınız.Bu değer oluşturmak için gerekli eklenen tablo için tetikleyici geçirilen.Bir kuralı, varsayılan değer kullanılmalıdır ve tetiği sinyalleri için değer gereklidir.INSERT deyim varsayılan değer sağlamak en iyi kuralıdır.

The deleted table in an INSTEAD OF INSERT trigger is always empty.