Klauzula OUTPUT (języka Transact-SQL)

Zwraca informacje, lub na podstawie wyrażenia, każdy wiersz dotyczy instrukcja INSERT, UPDATE, DELETE lub korespondencji SERYJNEJ.Wyniki te mogą być zwracane do aplikacji przetwarzania do użycia w takich elementów, jak komunikatów potwierdzających, archiwizowanie i innych takich wymagań aplikacji.Wyniki również mogą być wstawiane do tabela lub zmiennej tabela.Ponadto można przechwycić wyniki wyjście klauzula zagnieżdżonych INSERT, UPDATE, DELETE, lub MERGE instrukcja i wstawić tych wyników do tabela miejsce docelowe lub w widoku.

Uwaga

Instrukcja UPDATE, INSERT lub DELETE zawiera klauzulę wyjście zwróci wierszy do klient nawet wtedy, gdy w instrukcji napotka błędy i zostanie przywrócona.Wyniki nie powinny być używane, jeśli wystąpi jakiś błąd podczas wykonywania instrukcja.

Używany w:

USUWANIE

Aby wyświetlić właściwości operator plan wykonania

AKTUALIZACJA

KORESPONDENCJI SERYJNEJ

Topic link iconKonwencje składni języka Transact-SQL

<OUTPUT_CLAUSE> ::=
{
    [ OUTPUT <dml_select_list> INTO { @table_variable | output_table } [ ( column_list ) ] ]
    [ OUTPUT <dml_select_list> ]
}
<dml_select_list> ::=
{ <column_name> | scalar_expression } [ [AS] column_alias_identifier ]
    [ ,...n ]

<column_name> ::=
{ DELETED | INSERTED | from_table_name } . { * | column_name }
    | $action

Argumenty

  • @table\_variable
    Określa, table Zmienna, która zwrócone wiersze są wstawiane do zamiast zwracanych do obiektu wywołującego. @table\_variable należy podać przed instrukcja INSERT, UPDATE, DELETE lub korespondencji SERYJNEJ.

    Jeśli column_list nie jest określony, table Zmienna musi mieć taką samą liczbę kolumn w wyniku operacji OUTPUT zestaw. Wyjątek stanowią tożsamości i kolumny obliczane musi być pominięte.Jeśli column_list jest określony, żadnych kolumn została pominięta musi zezwolić na wartości null lub ma domyślnie przypisane do nich wartości.

    Aby uzyskać więcej informacji na temat table zmienne, zobacz Tabela (języka Transact-SQL).

  • output_table
    Specifies a table that the returned rows are inserted into instead of being returned to the caller.output_table may be a temporary table.

    Jeśli column_list nie jest określony, w tabela muszą mieć taką samą liczbę kolumn zestaw wyników operacji OUTPUT. Wyjątek stanowią tożsamości i kolumny obliczane.Muszą one być pominięte.Jeśli column_list jest określony, żadnych kolumn została pominięta musi zezwolić na wartości null lub ma domyślnie przypisane do nich wartości.

    output_table Nie można:

    • Włączono wyzwalaczy zdefiniowany na nim.

    • Udział po obu stronach ograniczenie klucz obcy.

    • Włączona reguły lub mają ograniczenia CHECK.

  • column_list
    Jest to opcjonalna lista kolumna nazwy w tabela miejsce docelowe klauzula INTO.Jest analogiczne do kolumna listy dozwolonych w WSTAWIANIE instrukcja.

  • scalar_expression
    Jest dowolną kombinację symboli i operatorów, którego wynikiem jest pojedyncza wartość.Funkcje agregujące nie są dozwolone w scalar_expression.

    Każde odwołanie do kolumny w tabela, które należy zmodyfikować musi być kwalifikowany z prefiksem włożona lub usuniętych.

  • column_alias_identifier
    Czy alternatywną nazwą używać do odwoływania się nazwę kolumna.

  • USUNIĘTE
    Jest prefiks kolumna, który określa wartość usuwane przez aktualizację lub usunięcie operacji.Kolumny prefiksem usuniętych odzwierciedlenia wartości przed AKTUALIZACJĄ, DELETE, lub instrukcja korespondencji SERYJNEJ zostało ukończone.

    Nie można użyć usuniętych z klauzula wyjście w instrukcja INSERT.

  • DODAJE
    Jest prefiks kolumna, który określa wartość dodana przez operację wstawiania lub aktualizacji.Kolumny prefiksem włożona odpowiada wartościom po wykonaniu instrukcja UPDATE, INSERT lub korespondencji SERYJNEJ, ale przed wyzwalacze są uruchamiane.

    WŁOŻONA nie może być używany z klauzula wyjście w instrukcja DELETE.

  • from_table_name
    Jest prefiks kolumna, który określa tabela zawarte w klauzula FROM instrukcja DELETE i UPDATE korespondencji SERYJNEJ, używaną do określania wiersze, które mają zostać zaktualizowane lub usunięte.

    Jeżeli określony jest również w tabela, które należy zmodyfikować w klauzula FROM, każde odwołanie do kolumny w tej tabela musi być kwalifikowany z prefiksem włożona lub usuniętych.

  • *
    Określa, że wszystkie kolumny, delete, insert lub akcja aktualizacji, będą zwracane w kolejności, w którym tabela.

    Na przykład OUTPUT DELETED.* w następujących DELETE instrukcja zwraca wszystkie kolumny usunięte z ShoppingCartItem Tabela:

    DELETE Sales.ShoppingCartItem
        OUTPUT DELETED.*;
    
  • column_name
    Jest odwołaniem kolumna jawne.Każde odwołanie do tabela, które należy zmodyfikować musi być prawidłowo kwalifikowany włożona lub prefiks usuniętych, na przykład: WSTAWIONYCH**.** column_name.

  • Akcja $
    Czy jest dostępny tylko w przypadku scalania instrukcja.Określa kolumna typu nvarchar(10) w klauzula wyjście w instrukcja korespondencji SERYJNEJ, które zwraca jeden z trzech wartości dla każdego wiersza: 'INSERT', 'UPDATE' lub 'DELETE' zgodnie z akcją, która została wykonana w danym wierszu.

Remarks

Dane wyjściowe <dml_select_list> Klauzula i dane wyjściowe <dml_select_list> DO { **@**table_variable | output_table } klauzuli można zdefiniować w pojedynczej instrukcja INSERT, UPDATE, DELETE lub korespondencji SERYJNEJ.

Uwaga

O ile nie podano inaczej, odwołania do klauzuli wyjście dotyczą zarówno klauzula Wyjście i klauzuli OUTPUT INTO.

Klauzula OUTPUT mogą być przydatne do pobierania wartości tożsamości lub kolumny obliczane po operacji INSERT lub UPDATE.

Gdy kolumna obliczana jest uwzględniona w <dml_select_list>, odpowiedniej kolumny w tabela wyników lub tabela zmienna nie jest kolumną obliczaną. Wartości w nowej kolumnie to wartości, które zostały obliczone w czasie wykonano instrukcję.

Nie ma żadnej gwarancji, że odpowiada kolejności, w którym zmiany zostaną zastosowane do tabela i kolejność, w którym wiersze są wstawiane do tabela wyników lub zmiennej tabela.

Jeśli parametry lub zmienne zostały zmodyfikowane w ramach instrukcji UPDATE, klauzula wyjście zawsze zwraca wartość parametr lub zmienna sprzed instrukcja wykonana zamiast wartości zmodyfikowanej.

Umożliwia wyjście z instrukcja UPDATE lub DELETE ustawiony na kursor, w której używana jest składnia WHERE CURRENT OF.

Klauzula wyjście nie jest obsługiwany w następujących instrukcji:

  • Instrukcje DML, które odwołują się do lokalnego widoków podzielonym na partycje, rozpowszechniane widoki na podzielonym na partycje lub zdalnego tabel.

  • Instrukcje INSERT, zawierające instrukcja wykonać.

  • Predykaty pełnego tekstu nie są dozwolone w klauzula OUTPUT, gdy poziom zgodności bazy danych jest zestaw do 100.

  • Nie można użyć klauzula INTO wyjście do wstawiania do widoku lub funkcja zestawu zestaw wierszy.

  • Nie można utworzyć funkcja zdefiniowaną przez użytkownika, jeśli zawiera ona klauzula INTO wyjście zawierający tabela jako jego miejsce docelowe.

Aby zapobiec nondeterministic klauzula wyjście nie może zawierać następujące informacje:

  • Podkwerendy lub funkcje zdefiniowane przez użytkownika, które przeprowadzają użytkownika lub systemu dostępu do danych lub są traktowane jako do wykonywania takiego dostępu.Funkcje zdefiniowane przez użytkownika są uznawane za dostęp do danych należy wykonać, gdy nie są one związanych ze schematem.

  • kolumna z widoku lub wbudowanej wartości tabela funkcja podczas tej kolumna jest definiowana przez jedną z następujących metod:

    • podkwerenda.

    • funkcja zdefiniowanej przez użytkownika, która wykonuje dostępu do danych użytkownika lub systemu lub przyjęto, że do wykonywania takiego dostępu.

    • Kolumna obliczana, zawierający wykonuje użytkownika lub dostępu do danych systemowych w swojej definicji funkcja zdefiniowanej przez użytkownika.

    Kiedy SQL Server wykrywa taki kolumna w klauzula wyjście powstaje błąd 4186. Aby uzyskać więcej informacji zobaczMSSQLSERVER_4186.

Wstawianie danych zwracanych ze wyjście klauzula do tabela

Gdy przechwytywanie wyniki wyjście klauzula w zagnieżdżonej INSERT, UPDATE, DELETE, lub MERGE instrukcja i wstawianiu tych wyniki do tabela miejsce docelowe, pamiętać następujące informacje:

  • Cała operacja jest niepodzielny.Zarówno w instrukcja INSERT i zagnieżdżonych instrukcja DML, zawierający dane wyjściowe klauzula wykonać, lub całej instrukcja nie powiedzie się.

  • Następujące ograniczenia dotyczą miejsce docelowe zewnętrzne instrukcja INSERT:

    • Obiekt miejsce docelowe nie może być tabela zdalna, widoku lub typowe wyrażenie tabela.

    • Obiekt miejsce docelowe nie może mieć ograniczenia klucz obcy lub odwoływać się ograniczenie klucz obcy.

    • Wyzwalacze nie mogą być definiowane w obiekcie docelowym.

    • Obiekt miejsce docelowe nie może uczestniczyć w replikacja łączenia lub mogą być aktualizowane subskrypcji dla replikacja transakcyjnej.

  • Zagnieżdżonych instrukcja DML, obowiązują następujące ograniczenia:

    • Obiekt miejsce docelowe nie może być zdalnego tabela lub widoku podzielonym na partycje.

    • urządzenie źródłowe sam nie może zawierać <dml_table_source> Klauzula.

  • Klauzuli INTO wyjście nie jest obsługiwany w instrukcji INSERT, które zawierają <dml_table_source> Klauzula.

  • @@ ROWCOUNT zwraca tylko za pomocą instrukcja INSERT zewnętrznych wierszy.

  • @@ IDENTITY SCOPE_IDENTITY i IDENT_CURRENT zwracają wartości tożsamości wygenerowanych tylko przez zagnieżdżonych instrukcja DML i te, które nie zostały wygenerowane przez zewnętrzne instrukcja INSERT.

  • Kwerendy powiadomień w instrukcja są traktowane jako pojedyncza obiekt i rodzaj żadnego komunikatu, który jest tworzony będzie typu zagnieżdżonego DML, nawet wtedy, gdy jest znacząca zmiana zewnętrznego instrukcja INSERT sam.

  • W <dml_table_source> Klauzula SELECT i WHERE nie mogą zawierać klauzule podkwerend, funkcja agregujących, funkcja klasyfikacji, predykaty pełnego tekstu, funkcja zdefiniowanych przez użytkownika, które wykonują dostępu do danych lub funkcja TEXTPTR.

: q

Kolumny zwrócił wyjście odzwierciedlające dane, jest on po INSERT, UPDATE, lub Instrukcja DELETE została ukończona, ale przed wyzwalacze są uruchamiane.

Aby zamiast z wyzwalaczy, zwracane wyniki są generowane, tak jakby INSERT, UPDATE lub DELETE faktycznie miał miejsce, nawet wtedy, gdy żadne modyfikacje nie mieć miejsce w wyniku operacji wyzwalacza.Użycie instrukcja, która zawiera klauzulę wyjście wewnątrz treści wyzwalacza aliasy tabela należy używać odwołania wyzwalacz wstawione i usunięte z tabel w celu uniknięcia duplikowania odwołania do kolumn z włożona i DELETED tabele związane z OUTPUT.

Jeśli klauzula OUTPUT jest określona bez określenia również słowa kluczowego INTO, miejsce docelowe operację DML nie może mieć żadnych włączonych wyzwalacza zdefiniowanego na nim dla danego akcja DML.Na przykład jeśli klauzula OUTPUT jest zdefiniowany w instrukcja SQL UPDATE, w tabela miejsce docelowe nie może mieć wszelkie włączonych wyzwalacze UPDATE.

Nie zezwalaj na opcję sp_configure ustawiono wyniki z wyzwalaczy, klauzulę wyjście bez klauzula INTO instrukcję, aby zakończyć się niepowodzeniem w przypadku wywołania z wewnątrz wyzwalacza powoduje, że.

Typy danych

Klauzula wyjście obsługuje dużego obiektu typów danych: nvarchar(max), varchar(max), varbinary(max), text, ntext, image, a xml. W przypadku korzystania z klauzula .WRITE w instrukcja UPDATE do modyfikowania nvarchar(max), varchar(max), lub varbinary(max) kolumna, pełnej przed i po obrazów wartości są zwracane, jeśli odwołuje się. Funkcja TEXTPTR () nie są wyświetlane jako część wyrażenie w text, ntext, lub image Kolumna w klauzula OUTPUT.

Kolejki

Wyjście można używać w aplikacji korzystających z tabel jako kolejek lub do przechowywania wyników pośrednich ustawia.Oznacza to aplikacja jest stale Dodawanie lub usuwanie wierszy z tabela.W poniższym przykładzie użyto klauzula wyjście w instrukcja DELETE, aby powrócić do aplikacji wywołującej usuniętego wiersza.

W tym przykładzie usuwa wiersz z tabela używana jako kolejka i zwrócenie wartości usuniętych aplikacji przetwarzania w jednej operacji.Inne semantyka można również zastosować, takich jak użycie tabela do wykonania na stosie.Jednak SQL Server nie gwarantuje kolejności przetwarzane i zwracane przez DML instrukcji przy użyciu klauzula wyjście wierszy. Jest on do aplikacji, aby uwzględnić odpowiednie klauzula WHERE, można zagwarantować semantyka żądane lub zrozumieć, że w przypadku wielu wierszy może kwalifikować operację DML, jest nie gwarantuje kolejności.Poniższy przykład używa podkwerenda i przyjmuje unikatowości jest charakterystyczne dla DatabaseLogID kolumna w celu wykonania żądanej semantyka zamawiania.

Uwaga

Użyć wskazówki tabela READPAST w instrukcjach UPDATE i DELETE, jeśli danego scenariusza zezwala na wiele aplikacji wykonywanie destrukcyjnych odczytu z jednej tabela.Pozwala to uniknąć zablokowania problemy, które mogą pochodzić, jeśli inna aplikacja jest już odczytywania pierwszego kwalifikujących się rejestrować w tabela.

Uprawnienia

Na dowolnej kolumny pobierane za pośrednictwem wymagane są uprawnienia SELECT <dml_select_list> lub używane w <scalar_expression>.

Na wszystkich tabel określonych w wymagane są uprawnienia INSERT <output_table>.

Przykłady

A.Użyciu prostej instrukcja INSERT INTO wyjście

The following example inserts a row into the ScrapReason table and uses the OUTPUT clause to return the results of the statement to the @MyTableVartable variable.Ponieważ ScrapReasonID kolumna zdefiniowano z właściwość tożsamości, wartość nie jest określona w INSERT instrukcja dla tej kolumna. Należy jednak zwrócić uwagę, że wartość jest generowana przez Database Engine dla tej kolumna jest zwracany w OUTPUT Klauzula kolumna INSERTED.ScrapReasonID.

B.Przy użyciu wyjście z instrukcja DELETE

W następującym przykładzie usunięto wszystkie wiersze w ShoppingCartItem Tabela. Klauzula OUTPUT DELETED.* Określa, że wyniki DELETE Instrukcja, która znajduje się wszystkie kolumny usunięte wiersze, zwracane do aplikacji wywołującej. The SELECT instrukcja that follows verifies the wyniki of the delete operation on the ShoppingCartItem tabela.

C.Za pomocą wyjście INTO za pomocą instrukcja UPDATE

Następujące aktualizacje przykład VacationHours kolumna w Employee Tabela o 25 procent dla pierwszych 10 wierszy. The OUTPUT clause returns the VacationHours value that exists before applying the UPDATE statement in the column DELETED.VacationHours, and the updated value in the column INSERTED.VacationHours to the @MyTableVartable variable.

Dwa SELECT instrukcje, należy wykonać, które zwracają wartości w @MyTableVar i wyniki operacji aktualizacji w Employee Tabela. Należy zwrócić uwagę, wyniki w INSERTED.ModifiedDate kolumna nie są takie same jak wartości w polach ModifiedDate kolumna w Employee Tabela. Dzieje się tak, ponieważ AFTER UPDATE wyzwalacz, który aktualizuje wartości ModifiedDate Data bieżąca jest zdefiniowany na Employee Tabela. Jednak zwrócił kolumny OUTPUT odzwierciedlające dane przed wyzwalacze są uruchamiane.

USE AdventureWorks;
GO
DECLARE @MyTableVar table(
    EmpID int NOT NULL,
    OldVacationHours int,
    NewVacationHours int,
    ModifiedDate datetime);
UPDATE TOP (10) HumanResources.Employee
SET VacationHours = VacationHours * 1.25 
OUTPUT INSERTED.EmployeeID,
       DELETED.VacationHours,
       INSERTED.VacationHours,
       INSERTED.ModifiedDate
INTO @MyTableVar;
--Display the result set of the table variable.
SELECT EmpID, OldVacationHours, NewVacationHours, ModifiedDate
FROM @MyTableVar;
GO
--Display the result set of the table.
--Note that ModifiedDate reflects the value generated by an
--AFTER UPDATE trigger.
SELECT TOP (10) EmployeeID, VacationHours, ModifiedDate
FROM HumanResources.Employee;
GO

D.Za pomocą wyjście INTO zwraca wyrażenie

W poniższym przykładzie opiera się na przykład C przez definiowanie wyrażenie w OUTPUT Klauzula jako różnica między zaktualizowane VacationHours wartość oraz VacationHours wartość przed zastosowaniem tej aktualizacji. The value of this expression is returned to the @MyTableVartable variable in the column VacationHoursDifference.

USE AdventureWorks;
GO
DECLARE @MyTableVar table(
    EmpID int NOT NULL,
    OldVacationHours int,
    NewVacationHours int,
    VacationHoursDifference int,
    ModifiedDate datetime);

UPDATE TOP (10) HumanResources.Employee
SET VacationHours = VacationHours * 1.25 
OUTPUT INSERTED.EmployeeID,
       DELETED.VacationHours,
       INSERTED.VacationHours,
       INSERTED.VacationHours - DELETED.VacationHours,
       INSERTED.ModifiedDate
INTO @MyTableVar;

--Display the result set of the table variable.
SELECT EmpID, OldVacationHours, NewVacationHours, 
    VacationHoursDifference, ModifiedDate
FROM @MyTableVar;
GO

SELECT TOP (10) EmployeeID, VacationHours, ModifiedDate
FROM HumanResources.Employee;
GO

E.Wyjście INTO przy użyciu from_table_name za pomocą instrukcja UPDATE

Następujące aktualizacje przykład ScrapReasonID kolumna w WorkOrder Tabela dla wszystkich zamówień z określonym ProductID i ScrapReasonID. The OUTPUT INTO klauzula returns values from the tabela being updated (WorkOrder) and also from the Product tabela. The Product tabela is used in the FROM klauzula to specify the rows to update. Ponieważ WorkOrder Tabela ma AFTER UPDATE wyzwalacz zdefiniowane, INTO słowo kluczowe jest wymagany.

USE AdventureWorks;
GO
DECLARE @MyTestVar table (
    OldScrapReasonID int NOT NULL, 
    NewScrapReasonID int NOT NULL, 
    WorkOrderID int NOT NULL,
    ProductID int NOT NULL,
    ProductName nvarchar(50)NOT NULL);

UPDATE Production.WorkOrder
SET ScrapReasonID = 4
OUTPUT DELETED.ScrapReasonID,
       INSERTED.ScrapReasonID, 
       INSERTED.WorkOrderID,
       INSERTED.ProductID,
       p.Name
    INTO @MyTestVar
FROM Production.WorkOrder AS wo
    INNER JOIN Production.Product AS p 
    ON wo.ProductID = p.ProductID 
    AND wo.ScrapReasonID= 16
    AND p.ProductID = 733;

SELECT OldScrapReasonID, NewScrapReasonID, WorkOrderID, 
    ProductID, ProductName 
FROM @MyTestVar;
GO

F.Wyjście INTO przy użyciu from_table_name w instrukcja DELETE

W następującym przykładzie usunięto wiersze ProductProductPhoto Tabela na podstawie kryteriów wyszukiwania określonych w FROM Klauzula DELETE Instrukcja. The OUTPUT klauzula returns columns from the tabela being deleted (DELETED.ProductID, DELETED.ProductPhotoID) and columns from the Product tabela. Ta tabela jest używana w FROM Klauzula, aby określić wiersze do usunięcia.

G.Za pomocą wyjście INTO o typie danych dużego obiektu

W poniższym przykładzie aktualizacje częściowe wartość w polu DocumentSummary, nvarchar(max) kolumna w Production.Document tabela za pomocą .WRITE Klauzula. Wyraz components zastępuje wyraz features określając zastąpienie wyrazu, położenie początku (przesunięcie) słowa, które zostaną zamienione w istniejących danych, a liczba znaków, które mają być zastępowany (długość). The example uses the OUTPUT clause to return the before and after images of the DocumentSummary column to the @MyTableVartable variable.Należy zauważyć, że w całości przed i po obrazów DocumentSummary kolumna są zwracane.

USE AdventureWorks;
GO
DECLARE @MyTableVar table (
    DocumentID int NOT NULL,
    SummaryBefore nvarchar(max),
    SummaryAfter nvarchar(max));
UPDATE Production.Document
SET DocumentSummary .WRITE (N'features',28,10)
OUTPUT INSERTED.DocumentID,
       DELETED.DocumentSummary, 
       INSERTED.DocumentSummary 
    INTO @MyTableVar
WHERE DocumentID = 3 ;
SELECT DocumentID, SummaryBefore, SummaryAfter 
FROM @MyTableVar;
GO

H.Za pomocą wyjście w wyzwalacz Z INSTEAD

W poniższym przykładzie użyto OUTPUT Klauzula w wyzwalacz ma zwrócić wyniki działania wyzwalacza. Po pierwsze, widok jest tworzony na ScrapReason Tabela, a następnie INSTEAD OF INSERT wyzwalacz jest zdefiniowany w widoku, który umożliwia tylko Name Kolumna tabela bazowa ma zostać zmodyfikowany przez użytkownika. Ponieważ kolumna ScrapReasonID to IDENTITY kolumna w tabela bazowa, wyzwalacz ignoruje wartości dostarczane przez użytkownika. Pozwala to Database Engine Aby automatycznie wygenerować poprawną wartość. Ponadto wartości podane przez użytkownika dla ModifiedDate jest ignorowany, a następnie ustawiana jest data bieżąca. The OUTPUT klauzula returns the values actually inserted into the ScrapReason tabela.

USE AdventureWorks;
GO
IF OBJECT_ID('dbo.vw_ScrapReason','V') IS NOT NULL
    DROP VIEW dbo.vw_ScrapReason;
GO
CREATE VIEW dbo.vw_ScrapReason
AS (SELECT ScrapReasonID, Name, ModifiedDate
    FROM Production.ScrapReason);
GO
CREATE TRIGGER dbo.io_ScrapReason 
    ON dbo.vw_ScrapReason
INSTEAD OF INSERT
AS
BEGIN
--ScrapReasonID is not specified in the list of columns to be inserted 
--because it is an IDENTITY column.
    INSERT INTO Production.ScrapReason (Name, ModifiedDate)
        OUTPUT INSERTED.ScrapReasonID, INSERTED.Name, 
               INSERTED.ModifiedDate
    SELECT Name, getdate()
    FROM inserted;
END
GO
INSERT vw_ScrapReason (ScrapReasonID, Name, ModifiedDate)
VALUES (99, N'My scrap reason','20030404');
GO

W tym polu jest zestaw wyników wygenerowany dnia 12 kwietnia 2004 r. ("2004-04-12'). Zwróć uwagę, że ScrapReasonIDActual i ModifiedDate kolumny odzwierciedlają generowanych przez operację wyzwalacz, a nie wartości w wartości INSERT Instrukcja.

Nazwa ScrapReasonID ModifiedDate

-------------  ---------------- -----------------------

17 16:23:33.050 Przyczyny 2004-04-12 Moje odpadków

I.Przy użyciu wyjście INTO z tożsamości i kolumny obliczane

Poniższy przykład tworzy EmployeeSales Tabela, który jest następnie wstawiany kilka wierszy do niej za pomocą INSERT Wyciąg z SELECT Instrukcja do pobierania danych z tabelami źródłowymi. The EmployeeSales tabela contains an kolumna tożsamości (EmployeeID) and a kolumna obliczana (ProjectedSales). Ponieważ wartości te są generowane przez SQL Server Database Engine Podczas wykonywania operacji wstawiania żadna z tych kolumn nie mogą być definiowane w @MyTableVar.

J.Korzystając z jednej instrukcja Wyjście i wyjście INTO

W następującym przykładzie usunięto wiersze ProductProductPhoto Tabela na podstawie kryteriów wyszukiwania określonych w FROM Klauzula DELETE Instrukcja. The OUTPUT INTO clause returns columns from the table being deleted (DELETED.ProductID, DELETED.ProductPhotoID) and columns from the Product table to the @MyTableVartable variable.The Product tabela is used in the FROM klauzula to specify the rows to delete. The OUTPUT klauzula returns the DELETED.ProductID, DELETED.ProductPhotoID columns and the data and czas the row was deleted from the ProductProductPhoto tabela to the calling application.

K.Wstawianie danych zwróconych przez klauzulę wyjście

W poniższym przykładzie przechwytuje dane zwrócone z OUTPUT Klauzula MERGE Instrukcja i wstawia dane do innej tabela. The MERGE instrukcja updates the Quantity kolumna of the ProductInventory tabela daily, based on orders that are processed in the SalesOrderDetail tabela. Powoduje usunięcie wierszy dla produktów, których zapasy upuść, aby 0 lub poniżej. W przykładzie przechwytuje wiersze, które są usuwane i wstawia je do innej tabela ZeroInventory, który śledzi produktów nie zapasów.