Using the inserted and deleted Tables

Instrukcje wyzwalacz DML używać dwóch specjalnych tabel: the deleted table and the inserted tables.SQL Server automatically creates and manages these tables.Te tabele tymczasowe, rezydentnego można używać do testowania skutków pewnych modyfikacji danych i zestaw warunki DML wyzwalać akcje.Nie można bezpośrednio modyfikować dane w tabelach lub wykonywania operacji języka (DDL) definicja danych w tabelach, takie jak CREATE INDEX.

W wyzwalacze DML dodaje and usunięte tabel są używane przede wszystkim do wykonywania następujących czynności:

  • Rozszerzenie więzy integralność między tabelami.

  • Wstawienie lub aktualizacja danych w tabelach podstawowych podstawowej widoku.

  • Testowanie błędów i wykonać czynności w oparciu o błędzie.

  • Obliczenia różnicy między stanu przed i po dokonaniu modyfikacji danych tabela i wykonać operacje oparte na tę różnicę.

The deleted tabela stores copies of the affected rows during DELETE and UPDATE statements.Podczas wykonywania instrukcja DELETE lub UPDATE wiersze są usuwane z tabela wyzwalacz i przekazywane usunięte tabela.The deleted tabela and the trigger tabela ordinarily have no rows in common.

The inserted tabela stores copies of the affected rows during INSERT and UPDATE statements.Podczas wstawiania lub aktualizacji dla transakcji, nowe wiersze są dodawane do obu dodaje tabelą i tabelą wyzwalacza.W wierszach dodaje tabela są kopiami nowych wierszy w tabela wyzwalacz.

Transakcja aktualizacji jest podobna do operacji usunięcia, a po nim operację wstawiania, stare wiersze są kopiowane do usunięte najpierw tabela, a następnie nowe wiersze są kopiowane z tabela wyzwalacz oraz dodaje tabela.

Jeśli warunki wyzwalacza, należy użyć dodaje and usunięte tabele odpowiednio dla akcja, która uruchomienia wyzwalacza.Mimo że odwoływania się do usunięte tabela podczas testowania INSERT lub dodaje tabela podczas testowania usunięcia nie powoduje żadnych błędów, te tabele test wyzwalacz nie zawierają żadnych wierszy w tych przypadkach.

Uwaga

Jeśli akcje wyzwalacza zależą od liczby wierszy efekty zmian do danych, za pomocą testów (na przykład analizę @@ ROWCOUNT) do modyfikacji multirow danych (INSERT, DELETE lub UPDATE na podstawie instrukcja SELECT) i podjąć odpowiednie działania.

SQL Server 2008 nie zezwala na text, ntext, lub image odwołuje się do kolumna w dodaje and usunięte tabel, aby je później wyzwalaczy.Jednak te typy danych są uwzględniane tylko do celów zachowania zgodności z poprzednimi wersjami.Preferowany przechowywania dużych danych polega na użyciu varchar(max), nvarchar(max), a varbinary(max) typy danych. Po i INSTEAD OF wyzwala pomocy technicznej varchar(max), nvarchar(max), a varbinary(max) dane w dodaje and usunięte tabel.Aby uzyskać więcej informacji zobaczCREATE TRIGGER (języka Transact-SQL).

Przykład o używanie tabela wstawionej w wyzwalacza w celu Wymuszaj reguły biznesowe

Ponieważ ograniczeń CHECK może odwoływać się tylko kolumna, które zdefiniowano ograniczenie poziomie kolumna lub tabela poziom, wszelkie ograniczenia tabela (w tym wypadku reguły biznesowe) musi być zdefiniowany jako wyzwalaczy.

Poniższy przykład tworzy wyzwalacz DML.Ten wyzwalacz sprawdza, czy poziom kredytu dla dostawcy jest dobry, podczas próby wstawienia nowego zamówienia zakupu do PurchaseOrderHeader Tabela. Uzyskanie poziom kredytu dostawcy, odpowiadający zamówienia zakupu, który właśnie został wstawiony, Vendor musi być odwołuje się do tabela i połączone z dodaje tabela.Jeśli poziom kredytu jest zbyt niska, wyświetlany jest komunikat, a nie wykonuje wstawiania.

Uwaga

Aby wyświetlić przykłady wyzwalaczy DML później, że aktualizacja wiele wierszy, zobacz Multirow Considerations for DML Triggers.

Za pomocą tabel wstawionych i usuniętych w INSTEAD Z wyzwalaczy

The inserted and deleted tables passed to INSTEAD OF triggers defined on tables follow the same rules as the inserted and deleted tables passed to AFTER triggers.Format dodaje and usunięte tabel jest taka sama, jak format tabela zdefiniowano wyzwalacza Z INSTEAD.Każda kolumna w dodaje and usunięte tabel mapuje bezpośrednio do kolumny w tabela bazowa.

Następujące reguły dotyczące przy odwoływaniu się do tabela z wyzwalacz Z INSTEAD instrukcja INSERT lub UPDATE należy podać wartości dla kolumn są takie same, jak gdyby w tabela nie ma wyzwalacz Z INSTEAD:

  • Nie można określić wartości dla obliczane kolumny lub kolumn z timestamp Typ danych.

  • W wypadku kolumn, których właściwość tożsamości, nie można określić wartości, chyba że IDENTITY_INSERT jest włączone dla tej tabela.Gdy IDENTITY_INSERT jest włączone, instrukcji INSERT, musisz podać wartość.

  • Instrukcji INSERT musi podać wartości dla wszystkich NOT NULL kolumn, które nie mają ograniczenia DEFAULT.

  • Dla każdej kolumna obliczanej, tożsamość, z wyjątkiem lub timestamp kolumna, wartości są opcjonalne dla każdej kolumna, która zezwala na wartości null lub NOT NULL dowolnej kolumna, która ma DOMYŚLNĄ definicją.

Po instrukcja INSERT, UPDATE lub DELETE odwołuje się do widoku, który ma wyzwalacz INSTEAD OF Database Engine wywołuje wyzwalacza zamiast wykonując żadnych czynności bezpośrednio przed dowolnej tabela. Wyzwalacz musi skorzystać z informacji prezentowanych w dodaje and usunięte tabel do budowania wszelkie instrukcje wymagane do wykonania żądanej akcja w tabeli podstawowej, nawet wówczas, gdy format informacji w dodaje and usunięte tabele budowanych do widoku różni się od formatu danych w tabelach podstawowych.

Format dodaje and usunięte tabel do wyzwalacz Z INSTEAD zdefiniowane w widoku jest taka sama, jak lista wyboru instrukcja SELECT, zdefiniowanych w widoku.Na przykład:

CREATE VIEW EmployeeNames (EmployeeID, LName, FName)
AS
SELECT e.EmployeeID, c.LastName, c.FirstName
FROM AdventureWorks.HumanResources.Employee e 
JOIN AdventureWorks.Person.Contact c
ON e.ContactID = c.ContactID

Wynik dla tego widoku zawiera trzy kolumny: an int i dwóch kolumn nvarchar kolumna. The inserted and deleted tables passed to an INSTEAD OF trigger defined on the view also have an int kolumna named EmployeeID, an nvarchar kolumna named LName, and an nvarchar kolumna named FName.

Lista wyboru widoku mogą również zawierać wyrażenia, które nie bezpośrednio mapować na jedną kolumna tabela bazy.Niektóre wyświetlanie wyrażeń, takich jak wywołania stała lub funkcja, nie może zawierać odwołania do kolumny i może zostać zignorowany.Złożone wyrażenia mogą odwoływać się do wielu kolumn, ale dodaje and usunięte tabele mają tylko jedną wartość dla każdego wstawionego wiersza.Te same problemy mają zastosowanie do wyrażeń prostych w widoku, jeśli odwołują się kolumna obliczana, która zawiera złożone wyrażenie.Wyzwalacz Z INSTEAD w widoku musi obsługiwać tych typów wyrażeń.Aby uzyskać więcej informacji zobaczWyrażenia i kolumny obliczane w, a nie z wyzwalaczy.

See Also

Concepts