Aracılığıyla paylaş


output yan tümcesi (Transact-SQL)

Bilgileri veya temel ifadeler, bir INSERT, update, delete veya birleştirme deyimetkilenen her satır döndürür.Bu sonuçlar , işleme uygulamasına onay iletileri, arşivleme ve diğer tür uygulama gereksinimleri gibi şeyler kullanmak için döndürülebilir.sonuçlar da bir tablo veya tablo değişkeni eklenir.Ayrıca, iç içe geçmiş bir INSERT, update, delete, bir çıktı yan tümce sonuçlar yakalama veya deyimBİRLEŞTİRİN ve bu sonuçlar bir hedeftablo veya Görünüm yerleştirin.

Not

deyim hata ile karşılaşması ve geri bile output yan tümce içeren bir güncelleştirme, INSERT veya delete deyim istemci satır döndürür.' % S'deyimi deyimçalıştırdığınızda bir hata oluşursa sonucu kullanılmamalıdır.

Kullanılan:

SİL

EKLE

GÜNCELLEŞTİRME

BİRLEŞTİRME

Konu bağlantısı simgesiTransact-SQL sözdizimi kuralları

Sözdizimi

<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

Bağımsız değişkenler

  • @table_variable
    Belirtir bir table döndürülen satır eklenir içine döndürülen arayan yerine değişken@table_variable INSERT, update, delete veya birleştirme deyimönce bildirilmelidir.

    column_list Belirtilmezse, table değişkeni çıktı sonuç kümesiolarak aynı sayıda sütun olması gerekir.Özel durumlar şunlardır: kimlik ve atlanan gerekir hesaplanan sütunlar.column_list Belirtilmişse, belirtilmemiş sütun null değerlere izin vermek veya varsayılan değerler atanmış.

    Hakkında daha fazla bilgi için table değişkenleri Bkz: Tablo (Transact-SQL).

  • output_table
    Döndürülen satırları çaðýrana döndürülür yerine eklendiği tablo belirtir.output_tablegeçici bir tabloolabilir.

    column_list Belirtilmezse, tablo çıktı sonuç kümesiolarak aynı sayıda sütun olması gerekir.Özel durumlar şunlardır: kimlik ve hesaplanan sütunlar.Bunlar atlanan gerekir.column_list Belirtilmişse, belirtilmemiş sütun null değerlere izin vermek veya varsayılan değerler atanmış.

    output_tableyapamazsınız:

    • Üzerinde tanımlı tetikleyiciler etkinleştirdiniz.

    • YABANCI anahtar kısıtlamasını her iki tarafındaki katılmak.

    • Kuralları etkin veya Kontrol kısıtlamaları vardır.

  • column_list
    Bir isteğe bağlı INTO yan tümce hedeftablo sütun adlarının listesidir. sütun listesi izin verilen paraleldir Ekledeyim.

  • scalar_expression
    Tek bir değeri değerlendiren sembolleri ve işleçler birleşimidir.Toplama işlevleri de verilmez scalar_expression.

    EKLENEN veya SİLİNEN önek ile değiştirilmesini tablo referans uygun olmalıdır.

  • column_alias_identifier
    Bir diğer ad, sütun adı başvurmak için kullanılır.

  • SİLİNMİŞ
    Güncelleştirme tarafından silinmiş değeri belirten bir sütun öneki veya silme işlemi.Sütun öneki ile SİLİNEN update, delete, önce değeri yansıtır veya birleştirme deyim tamamlandı.

    deleted INSERT deyimoutput yan tümce ile kullanılamaz.

  • EKLENEN
    INSERT veya update işlemi tarafından katma değer belirten bir sütun önektir.Sütun öneki ile EKLENEN güncelleştirme, ekleme veya birleştirme deyim tamamlandıktan sonra ancak Tetikleyiciler yürütülen önce değeri yansıtır.

    EKLENEN delete deyimoutput yan tümce ile kullanılamaz.

  • from_table_name
    from yan tümce güncelleştirmek veya silmek için satırları belirtmek için kullanılan bir delete, update veya birleştirme deyim dahil bir tablo belirtir bir sütun önektir.

    tablo EKLENEN veya SİLİNEN önekiyle nitelenmiş gerekir, tablo değiştirilmesini, ayrıca from yan tümce, sütunlar için herhangi bir başvuru belirtilir.

  • *
    Delete, INSERT veya update eylem tarafından etkilenen tüm sütunları tablokalırlar sırayla döndürülür belirtir.

    Örneğin, OUTPUT DELETED.* içinde aşağıdaki delete deyim silindi tüm sütunlar döndürür ShoppingCartItem tablo:

    DELETE Sales.ShoppingCartItem
        OUTPUT DELETED.*;
    
  • column_name
    Bir açık sütun başvurusudur.Değiştirilen tablo referans doğru EKLENEN veya SİLİNEN önek uygun, örneğin uygun olmalıdır: EKLENEN**.**column_name.

  • $eylem
    Yalnızca birleştirme deyimkullanılabilir.sütun türü belirtir nvarchar(10) her satır için üç değerden birini veren bir birleştirme deyim output yan tümce içinde: 'INSERT', 'update' veya ', bu satır üzerinde gerçekleştirilen eylem uyarınca Sil'.

Açıklamalar

Çıktı <dml_select_list> yan tümce ve çıktı <dml_select_list> INTO { **@**table_variable | output_table} tek INSERT, update, delete veya birleştirme deyim yan tümce tanımlanabilir.

Not

Aksi belirtilmediği sürece output yan tümce başvuruları output yan tümce ve output INTO yan tümceiçin başvurun.

output yan tümce , INSERT veya update işlemi sonrasında kimliği veya hesaplanmış sütunları değerini almak yararlı olabilir.

Ne zaman hesaplanmış bir sütun ekinde <dml_select_list>, buna karşılık gelen sütun çıktı tablo veya tablo değişkeni hesaplanmış bir sütundeğil.Yeni sütun değerleri deyim yürütüldü saat hesaplanmış değerlerdir.

Değişiklikleri tablo uygulanma sırası ve sipariş satırları çıktı tablo veya tablo değişkeni eklenir karşılık gelir hiçbir garantisi yoktur.

Parametre veya değişken bir update deyimbir parçası olarak değiştirilirse, değiştirilmiş değeri yerine yürütülen deyim önce olduğu gibi çıkış yan tümce her zaman parametre veya değişken değeri döndürür.

Çıktı, where current of sözdizimini kullanan bir imleç konumlandırılmış bir update veya delete deyim ile birlikte kullanabilirsiniz.

output yan tümce aşağıdaki tablolarda desteklenmez:

  • Yerel bölümlenmiş görünümler, dağıtılmış bölümlenmiş görünümler veya uzak tabloları başvuruDML deyimlerini.

  • execute deyimiçeren ifadeleri ekleyin.

  • Veritabanı Uyumluluk düzey küme için 100 olduğunda tam metin yüklemler çıktı yan tümce tümcesinde izin verilmez.

  • output INTO yan tümce , bir görünüm veya satır kümesi işleveklemek için kullanılamaz.

  • hedefolarak bir tablo içeren bir çıkış INTO yan tümce içeriyorsa, kullanıcı tanımlı bir işlev oluşturulamıyor.

FUNCTION davranışı engellemek için aşağıdaki başvuru output yan tümce içeremez:

  • Alt sorgular veya kullanıcı tanımlı işlevler, kullanıcı veya sistem veri erişimi gerçekleştirmek ya da bu tür yapmak için kabul edilir.Kullanıcı tanımlı işlevler, şemaya bağlı değillerse veri erişimini gerçekleştirmek için kabul edilir.

  • Bir ' % s'sütun sütun bir görünüm veya satır içi tablo-değerli işlev sütun aşağıdaki yöntemlerden birini kullanarak tanımlandığında:

    • Bir alt sorgu.

    • Kullanıcı veya sistem veri erişimi gerçekleştiren ya da bu tür yapmak için kabul edilir bir kullanıcı tanımlı işlev .

    • Kullanıcı veya sistem veri erişimi, tanımında gerçekleştiren bir kullanıcı tanımlı işlev içeren bir hesaplanan sütun .

    Zaman SQL Server böyle bir sütun algıladığı hata 4186 output yan tümceoluşturulur.Daha fazla bilgi için, bkz. MSSQLSERVER_4186.

From output yan tümcesi döndürülen bir tabloya ekleme veri

İç içe geçmiş bir INSERT deyiminde output yan tümce sonuçlar yakalanırken, GÜNCELLEŞTİRMEK, silmek, veya deyim BİRLEŞTİRMEK ve bu sonuçlar hedeftabloekleme, aşağıdaki bilgileri göz önünde bulundurun:

  • Tam atomikişlemdir.Hem INSERT deyim ve output yan tümceyürütmekiçeren iç içe DMLdeyim veya tam deyim başarısız olur.

  • hedef dış INSERT deyimaşağıdaki kısıtlamalar geçerlidir:

    • hedef uzak tablo, görünüm veya ortak tabloifadeolamaz.

    • hedef , bir yabancı anahtar kısıtlaması olamaz veya FOREIGN key kısıtlaması tarafından başvurulan.

    • Tetikleyiciler hedeftanımlanamaz.

    • birleştirme çoğaltması veya işlem çoğaltmaiçin güncelleştirilebilir abonelikleri hedef alamaz.

  • İç içe DML deyimaşağıdaki kısıtlamalar geçerlidir:

    • uzak tablo veya bölümlenmiş görünümün hedef olamaz.

    • kaynak kendini içeremez bir <dml_table_source>yan tümce.

  • output INTO yan tümce içeren INSERT deyimlerinde desteklenmeyen bir <dml_table_source> yan tümce.

  • @@ rowcount yalnızca dış INSERT deyimtarafından eklenen satır döndürür.

  • @@ IDENTITY, SCOPE_IDENTITY ve IDENT_CURRENT yalnızca iç içe DML deyimtarafından oluşturulan kimlik değerlerini ve değil olanlar dış INSERT deyimtarafından oluşturulan döndürür.

  • Sorgu bildirimleri deyim tek bir varlıkkabul ve dış INSERT deyim kendisini önemli değişiklik olsa bile, iç içe DMLtürü oluşturulan ileti türünü olacaktır.

  • De <dml_table_source> yan tümce, select ve where yan tümceleri alt sorgular, toplu işlevleri, sıralama işlevleri, tam metin yüklemler, veri erişimi gerçekleştiren kullanıcı tanımlı işlevler veya textptr işleviçeremez.

Tetikleyicileri

ÇIKTISI döndürülen sütunlar, update, INSERT sonra olan veya delete deyim tamamlandı, ancak Tetikleyiciler yürütülen önce verileri yansıtır.

INSTEAD OF tetikleyicileri, alınan sonuçlar oluşturulur için INSERT, update veya delete gerçekte gibi oluştuysa, tetiği işlemi sonucunda değişikliğe gerçekleşmesi bile.output yan tümce içeren bir deyim tetikleyici gövdesi içinde kullanılırsa, tablo diğer adları tetikleyici başvurmak için kullanılması gereken inserted ve deleted tabloları önlemek çoğaltma sütun başvuruları ile EKLENEN ve SİLİNEN tablolar ilişkili çıktı.

INTO anahtar belirtmeden output yan tümce belirtilirse, belirli DMLeylemiçin tanımlanmış tüm etkin tetikleyici DML işleminin hedef olamaz. Örneğin, output yan tümce içinde bir update deyimtanımlanırsa, hedef tablo etkinleştirilmiş tüm update Tetikleyiciler olamaz.

sp_configure Seçeneği disallow results from triggers olan küme, output yan tümce olmadan INTO yan tümce neden deyim başarısız olduğunda onu çağrıldığında dan içinde tetikleyici.

Veri Türleri

output yan tümce büyük nesne veri türleri destekler: nvarchar(max), varchar(max), varbinary(max), text, ntext, image, and xml.Kullandığınızda.Değiştirmek için güncelleştirme deyim yazma yan tümce bir nvarchar(max), varchar(max), veya varbinary(max)bunlar başvurulansütun, önce ve sonra değerleri görüntüler tam döndürülür. textptr () işlev , bir ifade parçası olarak üzerinde bulunamaz bir text, ntext, veya image sütun yan tümceçıktı.

Sıraları

ÇIKIŞ sırası olarak tabloları kullanan uygulamalar kullanabilirsiniz veya Ara sonuç tutmak için ayarlar.Diğer bir deyişle, uygulama sürekli olarak ekleme veya tablosatırları kaldırma.Aşağıdaki örnek çıktı yan tümce silinen satır uygulamaya dönmek için delete deyim kullanır.

USE AdventureWorks2008R2;
GO
DELETE TOP(1) dbo.DatabaseLog WITH (READPAST)
OUTPUT deleted.*
WHERE DatabaseLogID = 7;
GO

Bu örnek olarak kullanılan tablo satır kaldırır ve tek bir eylemişleme uygulamasında silinmiş değerleri döndürür.Diğer semantik da, bir yığın uygulamak için tablo kullanma gibi uygulanabilir.Ancak, SQL Server Sipariş satırları işlenir ve output yan tümcekullanarak DML deyimlerini tarafından döndürülen garantilemez.Bu, istenen semantikgaranti veya DML işlemi için birden çok satır nitelemek zaman olduğunu anlamak ilgili where yan tümce eklemek kadar garantili bir sipariş uygulamasıdır.Aşağıdaki örnek, bir alt sorgu kullanır ve benzersiz bir özelliği olduğunu varsayar DatabaseLogIDİstenen sıralama semantikuygulamak içinsütun .

USE tempdb;
GO

CREATE TABLE dbo.table1
(
    id INT,
    employee VARCHAR(32)
)
go

INSERT INTO dbo.table1 VALUES 
      (1, 'Fred')
     ,(2, 'Tom')
     ,(3, 'Sally')
     ,(4, 'Alice');
GO

DECLARE @MyTableVar TABLE
(
    id INT,
    employee VARCHAR(32)
);

PRINT 'table1, before delete' 
SELECT * FROM dbo.table1;

DELETE FROM dbo.table1
OUTPUT DELETED.* INTO @MyTableVar
WHERE id = 4 OR id = 2;

PRINT 'table1, after delete'
SELECT * FROM dbo.table1;

PRINT '@MyTableVar, after delete'
SELECT * FROM @MyTableVar;

DROP TABLE dbo.table1;

--Results
--table1, before delete
--id          employee
------------- ------------------------------
--1           Fred
--2           Tom
--3           Sally
--4           Alice
--
--table1, after delete
--id          employee
------------- ------------------------------
--1           Fred
--3           Sally
--@MyTableVar, after delete
--id          employee
------------- ------------------------------
--2           Tom
--4           Alice

Not

Senaryonuz yıkıcı okuma bir tablogerçekleştirmek birden çok uygulama için izin verir, update ve delete deyimlerinde readpast tablo ipucu kullanın.Bu kilitleme engelleyen başka bir uygulama zaten ilk niteleme okuyor, bulmalı ya da sorunlar tablokaydetmek.

İzinler

select izinleri aracılığıyla alınan tüm sütunlar üzerinde gerekli <dml_select_list> ya da kullanılan <scalar_expression>.

Belirtilen tüm tablolarda INSERT izinleri gerekli <output_table>.

Örnekler

A.Çıkış içine bir basit INSERT deyimile kullanma

Aşağıdaki örnek bir satıra ekler ScrapReasontablo ve kullanımları OUTPUTyan tümce deyim sonuçlar döndürmek için @MyTableVartable değişkeni.Çünkü ScrapReasonIDsütun kimlik özellikile tanımlanan, bir değer olarak belirtilmemiş INSERTo sütuniçindeyim . Ancak değeri tarafından üretilen dikkat Veritabanı Altyapısı sütun iade için OUTPUT yan tümce sütun inserted.ScrapReasonID.

USE AdventureWorks2008R2;
GO
DECLARE @MyTableVar table( NewScrapReasonID smallint,
                           Name varchar(50),
                           ModifiedDate datetime);
INSERT Production.ScrapReason
    OUTPUT INSERTED.ScrapReasonID, INSERTED.Name, INSERTED.ModifiedDate
        INTO @MyTableVar
VALUES (N'Operator error', GETDATE());

--Display the result set of the table variable.
SELECT NewScrapReasonID, Name, ModifiedDate FROM @MyTableVar;
--Display the result set of the table.
SELECT ScrapReasonID, Name, ModifiedDate 
FROM Production.ScrapReason;
GO

B.delete deyimoutput kullanma

Aşağıdaki örnek, tüm satırları siler ShoppingCartItem tablo.yan tümceOUTPUT DELETED.* belirleyen bir sonuçlar DELETEdeyim, silinmiş satırlar yer alan tüm sütun olduğundan döndürülmesi çağıran bir uygulama. SELECTİzleyendeyim üzerinde silme işlemi sonuçlar doğrular ShoppingCartItemtablo.

USE AdventureWorks2008R2;
GO
DELETE Sales.ShoppingCartItem
OUTPUT DELETED.* 
WHERE ShoppingCartID = 20621;

--Verify the rows in the table matching the WHERE clause have been deleted.
SELECT COUNT(*) AS [Rows in Table] FROM Sales.ShoppingCartItem WHERE ShoppingCartID = 20621;
GO

C.Çıkış içinde bir update deyimile kullanma

Aşağıdaki örnek güncelleştirmeleri VacationHours sütun Employee tablo için ilk 10 satırı yüzde 25 tarafındanAyrıca sütundeğerini ayarlarModifiedDate Geçerli tarih. OUTPUTyan tümce verir VacationHours o uygulamadan önce değeri UPDATEdeyim sütun deleted.VacationHoursve güncelleştirilmiş değeri sütun inserted.VacationHours için @MyTableVartable değişkeni.

İki SELECT deyimlerini izleyin değerleri dönmek @MyTableVar ve güncelleştirme işlemi sonuçlar Employee tablo.

USE AdventureWorks2008R2;
GO
DECLARE @MyTableVar table(
    EmpID int NOT NULL,
    OldVacationHours int,
    NewVacationHours int,
    ModifiedDate datetime);
UPDATE TOP (10) HumanResources.Employee
SET VacationHours = VacationHours * 1.25,
    ModifiedDate = GETDATE() 
OUTPUT inserted.BusinessEntityID,
       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.
SELECT TOP (10) BusinessEntityID, VacationHours, ModifiedDate
FROM HumanResources.Employee;
GO

D.Çıkış halinde ifadedönmek için kullanma

Aşağıdaki örnek, bir ifade tanımlayarak örnek c üzerinde oluşturur OUTPUT yan tümce güncelleştirilmiş arasındaki fark olarak VacationHours değeri ve VacationHours güncelleştirme uygulanmadan önceki değer.Bu ifade değeri döndürülür @MyTableVartable değişken sütun VacationHoursDifference.

USE AdventureWorks2008R2;
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,
    ModifiedDate = GETDATE()
OUTPUT inserted.BusinessEntityID,
       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) BusinessEntityID, VacationHours, ModifiedDate
FROM HumanResources.Employee;
GO

E.output INTO from_table_name içinde bir update deyimile kullanma

Aşağıdaki örnek güncelleştirmeleri ScrapReasonID sütun WorkOrder tablo için belirtilen tüm iş siparişleri ProductID ve ScrapReasonID.OUTPUT INTOyan tümce güncelleştirilmekte tablo değerleri döndürür ( WorkOrder) ve aynı zamanda Producttablo. Producttablo içinde kullanılan FROMyan tümce belirtin satırlarını güncelleştirme. Çünkü WorkOrder tablo bir AFTER UPDATE , tanımlanmış tetikleyici INTO anahtar gereklidir.

USE AdventureWorks2008R2;
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.output INTO from_table_name delete deyimkullanma

Aşağıdaki örnekte satır silinir ProductProductPhototanımlanan arama ölçütleri temeltablo FROMyan tümce DELETEdeyim. OUTPUTyan tümce silinen tablo sütunları döndürür ( deleted.ProductID, deleted.ProductPhotoID) sütun ve Producttablo. Bu tablo kullanılır FROM yan tümce belirtme satırları silme.

USE AdventureWorks2008R2;
GO
DECLARE @MyTableVar table (
    ProductID int NOT NULL, 
    ProductName nvarchar(50)NOT NULL,
    ProductModelID int NOT NULL, 
    PhotoID int NOT NULL);

DELETE Production.ProductProductPhoto
OUTPUT DELETED.ProductID,
       p.Name,
       p.ProductModelID,
       DELETED.ProductPhotoID
    INTO @MyTableVar
FROM Production.ProductProductPhoto AS ph
JOIN Production.Product as p 
    ON ph.ProductID = p.ProductID 
    WHERE p.ProductModelID BETWEEN 120 and 130;

--Display the results of the table variable.
SELECT ProductID, ProductName, ProductModelID, PhotoID 
FROM @MyTableVar
ORDER BY ProductModelID;
GO

G.Çıkış içine büyük nesne veri türü ile kullanma

Aşağıdaki örnek bir kısmi değer güncelleştirmeleri DocumentSummary, bir nvarchar(max)sütun Production.Documentkullanaraktablo, .WRITEyan tümce. Word components word tarafından yerine features değiştirme word, Word'ün varolan verileri ve karakter sayısı olarak değiştirildi (uzunluk) olacak şekilde değiştirilmesi başlangıç konumunu (ofset) belirterek.Bu örnek kullanır OUTPUTdönmek içinyan tümce önce ve sonra görüntülerini DocumentSummary sütun @MyTableVartable değişkeni.Unutmayın önce ve sonra resimleri tam DocumentSummary sütun döndürülür.

USE AdventureWorks2008R2;
GO
DECLARE @MyTableVar table (
    SummaryBefore nvarchar(max),
    SummaryAfter nvarchar(max));
UPDATE Production.Document
SET DocumentSummary .WRITE (N'features',28,10)
OUTPUT deleted.DocumentSummary, 
       inserted.DocumentSummary 
    INTO @MyTableVar
WHERE Title = N'Front Reflector Bracket Installation';
SELECT SummaryBefore, SummaryAfter 
FROM @MyTableVar;
GO

H.ÇIKTI bir INSTEAD of tetikleyicisi kullanarak

Aşağıdaki örnek OUTPUT yan tümce tümcesinde tetiği işlemi sonuçlar döndürmek için bir tetikleyici.İlk olarak, üzerinde bir görünüm oluşturulduğunda ScrapReason tablove sonra bir INSTEAD OF INSERT yalnızca sağlayan görünüm tetikleyici tanımlanmış Name sütun temel tablo değiştiren kullanıcı.Çünkü sütun ScrapReasonID olan bir IDENTITY sütun temel tablo, tetikleyici yoksayar kullanıcı tarafından sağlanan değer.Böylece, Veritabanı Altyapısı için otomatik olarak üretmek doğru bir değer.Ayrıca, kullanıcı tarafından sağlanan değeri ModifiedDate dikkate alınmaz ve geçerli tarih küme .OUTPUTyan tümce aslında eklenen değerleri döndüren ScrapReasontablo.

USE AdventureWorks2008R2;
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

İşte 12 Nisan 2004'te üretilen sonuç kümesi ('2004-04-12').Dikkat ScrapReasonIDActual ve ModifiedDate sütunları yansıtacak sağlanan değerler yerine tetiği işlemi tarafından oluşturulan değerler INSERT deyim.

ScrapReasonID  Name             ModifiedDate

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

17             My scrap reason  2004-04-12 16:23:33.050

Ö.Çıkış halinde kimlik ve hesaplanan sütunlar ile kullanma

Aşağıdaki örnek oluşturur EmployeeSales tablo ve birkaç satır kullanarak mikrofona ekleyen bir INSERT deyim ile bir SELECT deyim kaynak tablolar veri almak içinEmployeeSalestablo kimlik sütun içerir ( EmployeeID) ve hesaplanmış bir sütun (ProjectedSales).Çünkü bu değerler tarafından üretilen SQL Server Veritabanı Altyapısı ekleme işlemi sırasında bu sütunları hiçbiri tanımlanabilir @MyTableVar.

USE AdventureWorks2008R2 ;
GO
IF OBJECT_ID ('dbo.EmployeeSales', 'U') IS NOT NULL
    DROP TABLE dbo.EmployeeSales;
GO
CREATE TABLE dbo.EmployeeSales
( EmployeeID   int IDENTITY (1,5)NOT NULL,
  LastName     nvarchar(20) NOT NULL,
  FirstName    nvarchar(20) NOT NULL,
  CurrentSales money NOT NULL,
  ProjectedSales AS CurrentSales * 1.10 
);
GO
DECLARE @MyTableVar table(
  LastName     nvarchar(20) NOT NULL,
  FirstName    nvarchar(20) NOT NULL,
  CurrentSales money NOT NULL
  );

INSERT INTO dbo.EmployeeSales (LastName, FirstName, CurrentSales)
  OUTPUT INSERTED.LastName, 
         INSERTED.FirstName, 
         INSERTED.CurrentSales
  INTO @MyTableVar
    SELECT c.LastName, c.FirstName, sp.SalesYTD
    FROM Sales.SalesPerson AS sp
    INNER JOIN Person.Person AS c
        ON sp.BusinessEntityID = c.BusinessEntityID
    WHERE sp.BusinessEntityID LIKE '2%'
    ORDER BY c.LastName, c.FirstName;

SELECT LastName, FirstName, CurrentSales
FROM @MyTableVar;
GO
SELECT EmployeeID, LastName, FirstName, CurrentSales, ProjectedSales
FROM dbo.EmployeeSales;
GO

J.ÇIKTI ve çıktı olarak tek bir deyimkullanma

Aşağıdaki örnekte satır silinir ProductProductPhototanımlanan arama ölçütleri temeltablo FROMyan tümce DELETEdeyim. OUTPUT INTOyan tümce silinen tablo sütunları döndürür ( deleted.ProductID, deleted.ProductPhotoID) sütun ve Producttablo @MyTableVartable değişkeni.Producttablo içinde kullanılan FROMyan tümce belirtme satırları silme. OUTPUTyan tümce verir deleted.ProductID, deleted.ProductPhotoID sütunları ve tarih ve saat satır silindi ProductProductPhototablo çağıran bir uygulama.

USE AdventureWorks2008R2;
GO
DECLARE @MyTableVar table (
    ProductID int NOT NULL, 
    ProductName nvarchar(50)NOT NULL,
    ProductModelID int NOT NULL, 
    PhotoID int NOT NULL);

DELETE Production.ProductProductPhoto
OUTPUT DELETED.ProductID,
       p.Name,
       p.ProductModelID,
       DELETED.ProductPhotoID
    INTO @MyTableVar
OUTPUT DELETED.ProductID, DELETED.ProductPhotoID, GETDATE() AS DeletedDate 
FROM Production.ProductProductPhoto AS ph
JOIN Production.Product as p 
    ON ph.ProductID = p.ProductID 
WHERE p.ProductID BETWEEN 800 and 810;

--Display the results of the table variable.
SELECT ProductID, ProductName, PhotoID, ProductModelID 
FROM @MyTableVar;
GO

K.Çıktı yan tümcedöndürülen veri ekleme

Aşağıdaki örnek, döndürülen verileri yakalar OUTPUT yan tümce bir MERGE deyimve bu verilerin başka bir tabloekler.MERGEdeyim güncelleştirmeleri Quantitysütun ProductInventorytablo her gün, esas işlenir siparişleri SalesOrderDetailtablo. Ayrıca, stokların bırak için ürünler için satırları siler 0 veya altı.Örnek silinir ve bunları başka bir tabloekler Satır yakalar ZeroInventory, izler ürünleriyle hiçbir stok.

USE AdventureWorks2008R2;
GO
IF OBJECT_ID(N'Production.ZeroInventory', N'U') IS NOT NULL
    DROP TABLE Production.ZeroInventory;
GO
--Create ZeroInventory table.
CREATE TABLE Production.ZeroInventory (DeletedProductID int, RemovedOnDate DateTime);
GO

INSERT INTO Production.ZeroInventory (DeletedProductID, RemovedOnDate)
SELECT ProductID, GETDATE()
FROM
(   MERGE Production.ProductInventory AS pi
    USING (SELECT ProductID, SUM(OrderQty) FROM Sales.SalesOrderDetail AS sod
           JOIN Sales.SalesOrderHeader AS soh
           ON sod.SalesOrderID = soh.SalesOrderID
           AND soh.OrderDate = '20070401'
           GROUP BY ProductID) AS src (ProductID, OrderQty)
    ON (pi.ProductID = src.ProductID)
    WHEN MATCHED AND pi.Quantity - src.OrderQty <= 0
        THEN DELETE
    WHEN MATCHED
        THEN UPDATE SET pi.Quantity = pi.Quantity - src.OrderQty
    OUTPUT $action, deleted.ProductID) AS Changes (Action, ProductID)
WHERE Action = 'DELETE';
IF @@ROWCOUNT = 0
PRINT 'Warning: No rows were inserted';
GO
SELECT DeletedProductID, RemovedOnDate FROM Production.ZeroInventory;