ZAMIAST WSTAWIANIA wyzwalaczy

ZAMIAST WSTAWIANIA wyzwalaczy można zdefiniować na widok lub tabela, aby zastąpić standardowe akcja instrukcja INSERT.Zazwyczaj wyzwalacza INSTEAD OF WSTAW jest zdefiniowana w widoku, aby wstawić dane do jednego lub więcej tabel bazowych.

Kolumny na liście wybierz widok może być nullable lub niedopuszczające.Jeśli kolumna widoku nie dopuszcza wartość null, instrukcja INSERT należy podać wartości dla kolumny.kolumna widoku Zezwalaj na wartości null, jeśli wyrażenie Definiowanie kolumna widoku zawiera elementy, takie jak:

  • Odniesienia do dowolnej kolumna tabela bazowa, że dozwolone są wartości null

  • Operatory arytmetyczne

  • Odwołania do funkcji

  • SPRAWY lub ŁĄCZONEJ z nullable wyrażenia cząstkowego

  • NULLIF

Można użyć AllowsNull właściwość zgłoszonych przez funkcja COLUMNPROPERTY do określenia, czy kolumna widoku dozwolone są wartości null.Sp_help procedura składowana także raporty, które kolumny widoku wartości null.

WSTAW instrukcja jest odwoływanie się do widoku, który ma wyzwalacza INSTEAD OF WSTAW należy podać wartości dla każdej kolumna widoku, który nie zezwala na wartości null.Zawiera kolumny widoku, które odwołują się do kolumn w tabela bazowa, dla którego wartości wejściowe nie można określić, takie jak:

  • Kolumny obliczane w tabela bazowa.

  • Tożsamość kolumny w tabela bazowa, dla którego tożsamości WSTAW jest wyłączona.

  • Podstawowe kolumny tabela z timestamp typu danych.

Jeżeli wyzwalacza INSTEAD OF WSTAW widok generuje WSTAW przeciwko przy użyciu danych w tabela bazowa dodaje się tabeli, wartości dla tych typów kolumn należy zignorować nie dołączając kolumn na liście wybierz instrukcja INSERT.Instrukcja INSERT można generować manekina wartości dla tych typów kolumn.

Na przykład, podczas gdy instrukcja INSERT należy określić wartość dla kolumny widoku, który mapuje tożsamości lub kolumna obliczana w tabela bazowa, jej podania wartości zastępczych.Wyzwalacza INSTEAD OF można zignorować wartości dostarczane, gdy stanowi on instrukcja INSERT, która wstawia wartości do tabela bazowa.

Poniższe instrukcje tworzą tabela, widoku i wyzwalacz zilustrowania procesu:

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

INSERT instrukcja, który odnosi się bezpośrednio do BaseTable nie można podać wartość dla PrimaryKey i ComputedCol kolumny.Na przykład:

--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')

Jednakże INSERT instrukcja, która odnosi się do InsteadView należy podać wartość dla PrimaryKey i 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

Dodaje się tabela przekazany do InsteadTrigger jest zbudowany z nonnullable PrimaryKey i ComputedCol kolumna; Dlatego INSERT instrukcja, która odwołuje się do widoku, należy podać wartość dla tych kolumn.Wartości 999 i N'XXXXXX' są przekazywane w InsteadTrigger, ale INSERT instrukcja w wyzwalacz wybierz nie, albo inserted.PrimaryKey lub inserted.ComputedCol; Dlatego wartości są ignorowane.Wiersz wstawiony rzeczywiście BaseTable ma 2 w PrimaryKey i N'BluePlastic' w ComputedCol.

Wartości zawarte w dodaje się tabela obliczone tożsamości, i timestamp kolumny są różne dla wyzwalaczy INSTEAD OF WSTAWIĆ określone w tabelach porównywane wyzwalaczy INSTEAD OF określono na widoki.

kolumna tabela bazowej

Wartość w tabela wstawionej w wszelkie wyzwalacza WSTAWIENIA tabela

Wartość w tabela wstawionej w wyzwalacza INSTEAD OF WSTAWIĆ w widoku

Jest to kolumna obliczana.

Wyrażenie obliczane

Określona przez użytkownika wartość lub wartość NULL

Zawiera właściwość tożsamości.

0 Jeśli IDENTITY_INSERT jest wyłączona, określona wartość Jeżeli IDENTITY_INSERT jest włączone

Określona przez użytkownika wartość lub wartość NULL

Ma timestamp typu danych.

Binarne zer, jeśli kolumna nie zezwalaj na wartości null, wartość NULL, jeśli w kolumnie dozwolone są wartości null

Określona przez użytkownika wartość lub wartość NULL

WSTAW instrukcja że bezpośrednio odwołania do tabela bazowa nie muszą podawać wartości kolumna NOT NULL, zawierający DOMYŚLNEJ definicji.Jeśli w instrukcja INSERT nie podano wartości, używana jest wartość domyślna.Jeśli kolumna NOT NULL z DOMYŚLNEJ definicji odwołuje się proste wyrażenie w widoku, który ma wyzwalacza INSTEAD OF WSTAW, jednak żadnych instrukcja INSERT odwołującego się do widoku należy podać wartość dla kolumny.Ta wartość jest wymagane do utworzenia dodaje się tabela przekazany do wyzwalacza.Konwencja jest wymagana dla sygnałów do wyzwalacza użyta wartość domyślna wartość.Najlepsze Konwencji jest dla instrukcja INSERT podania wartości domyślne.

Usunięte tabela wyzwalacza INSTEAD OF WSTAW zawsze jest pusty.