Aracılığıyla paylaş


Örnekler (Transact-SQL) Ekle

Bu konuda kullanma örnekleri sağlar Transact-SQL Ekle deyim içinde SQL Server 2008 R2. INSERT örnekler aşağıdaki kategorileri. göre gruplandırılır

Kategori

Özellikli sözdizimi öğeleri

Temel sözdizimi

• tablo değeri oluşturucu ekleme

sütun değerleri işleme

• Kullanıcı tanımlı türler kimlik • NEWID • varsayılan değerleri

Diğer tablolardan veri ekleme

INSERT…SELECT • INSERT…• İLE ortak tablo ifade • üst yürütme

hedef nesne standart tablolar dışındaki belirtme

• tablo değişkenlerini görünümleri

uzak tablosatırları ekleme

Bağlantılı sunucu • SORGUAÇ satır kümesi işlev • opendatasource satır kümesi işlev

Tabloları veya veri dosyalarından veri alma toplu

INSERT…• openrowset işlevseçin

İpuçlarını kullanarak sorgu iyileştiricisi varsayılan davranışını geçersiz kılma

Tablo ipuçları

INSERT deyim sonuçlar yakalama

output yan tümce

Temel sözdizimi

Bu bölümdeki örnekler en az gerekli sözdizimini kullanarak INSERT deyim temel işlevselliğini göstermektedir.

A.Tek bir veri satırı ekleme

Aşağıdaki örnek tablobir satır eklerProduction.UnitMeasure. Bu tablo sütunlar UnitMeasureCode, Name, ve ModifiedDate.Çünkü tüm sütunlar için değerleri sağlanan ve tablosütunları aynı sırada listelenen sütun adları sütun listesinde belirtilmesi gerekmez.

USE AdventureWorks2008R2;
GO
INSERT INTO Production.UnitMeasure
VALUES (N'FT', N'Feet', '20080414');
GO

B.Birden çok veri satırı ekleme

Aşağıdaki örnek tablo değeri Oluşturucu üç satırlar eklemek için Production.UnitMeasuretek bir INSERT deyimtablo . Çünkü tüm sütunlar için değerleri sağlanan ve tablosütunları aynı sırada listelenen sütun adları sütun listesinde belirtilmesi gerekmez.

USE AdventureWorks2008R2;
GO
INSERT INTO Production.UnitMeasure
VALUES (N'FT2', N'Square Feet ', '20080923'), (N'Y', N'Yards', '20080923'), (N'Y3', N'Cubic Yards', '20080923');
GO

C.tablo sütunları aynı sırada olmayan veriler ekleme

Aşağıdaki örnek, her sütuneklenen değer açıkça belirtmek için sütun listesi kullanır.sütun sırasını Production.UnitMeasuretablo UnitMeasureCode, Name, ModifiedDate; Ancak, sütunlar bu sırada listelenmeyen column_list.

USE AdventureWorks2008R2;
GO
INSERT INTO Production.UnitMeasure (Name, UnitMeasureCode,
    ModifiedDate)
VALUES (N'Square Yards', N'Y2', GETDATE());
GO

Sütun değerleri işleme

Bu bölümdeki örnekler, bir kimlik özellikile varsayılan değer tanımlanan veya veri türleriyle gibi tanımlanmış sütunların değerleri ekleme yöntemleri göstermektedir uniqueidentifer veya kullanıcı tanımlı tür sütunlar.

A.Varsayılan değerleri olan sütunlar ile bir tablo veri ekleme

Aşağıdaki örnek, satır otomatik olarak bir değer oluşturur veya varsayılan değer olan sütun içeren bir tablo eklemek gösterir.Column_1otomatik olarak eklenen değer bir dize içinde birleştirerek bir değer üretir hesaplanan bir sütun column_2.Column_2varsayılan kısıtlama ile tanımlanır.Bu sütuniçin bir değer belirtilmezse, varsayılan değer kullanılır.Column_3ile tanımlanan rowversion veri türü, hangi otomatik olarak oluşturduğu benzersiz, artan ikili sayı.Column_4otomatik olarak bir değer oluşturmaz.Bu sütun için bir değer belirtilmemişse, null eklenir.INSERT deyimleri bazı sütunların tümünü değil fakat için değerleri içeren satırları ekleyin.Son INSERT deyimsütun belirtilen ve yalnızca varsayılan değerler varsayılan DEĞERLER yan tümcekullanarak eklenir.

USE AdventureWorks2008R2;
GO
IF OBJECT_ID ('dbo.T1', 'U') IS NOT NULL
    DROP TABLE dbo.T1;
GO
CREATE TABLE dbo.T1 
(
    column_1 AS 'Computed column ' + column_2, 
    column_2 varchar(30) 
        CONSTRAINT default_name DEFAULT ('my column default'),
    column_3 rowversion,
    column_4 varchar(40) NULL
);
GO
INSERT INTO dbo.T1 (column_4) 
    VALUES ('Explicit value');
INSERT INTO dbo.T1 (column_2, column_4) 
    VALUES ('Explicit value', 'Explicit value');
INSERT INTO dbo.T1 (column_2) 
    VALUES ('Explicit value');
INSERT INTO T1 DEFAULT VALUES; 
GO
SELECT column_1, column_2, column_3, column_4
FROM dbo.T1;
GO

B.Kimlik sütunolan bir tablo veri ekleme

Aşağıdaki örnek, farklı bir kimlik sütunveri ekleme yöntemleri göstermektedir.İlk iki INSERT deyimleri kimlik değerlerini yeni satırlar için oluşturulmasına olanak sağlar.Üçüncü INSERT deyim set IDENTITY_INSERT deyim sütun kimlik özellik geçersiz kılar ve kimlik sütunaçıkça bir değer ekler.

USE AdventureWorks2008R2;
GO
IF OBJECT_ID ('dbo.T1', 'U') IS NOT NULL
    DROP TABLE dbo.T1;
GO
CREATE TABLE dbo.T1 ( column_1 int IDENTITY, column_2 VARCHAR(30));
GO
INSERT T1 VALUES ('Row #1');
INSERT T1 (column_2) VALUES ('Row #2');
GO
SET IDENTITY_INSERT T1 ON;
GO
INSERT INTO T1 (column_1,column_2) 
    VALUES (-99, 'Explicit identity value');
GO
SELECT column_1, column_2
FROM T1;
GO

C.NEWID() kullanarak bir uniqueidentifier sütun veri ekleme

Aşağıdaki örnek NEWIDiçin bir GUID elde etmek için () işlev column_2.Aksine kimlik sütunları için Veritabanı Altyapısı içeren sütunlar için değerleri otomatik olarak oluşturmaz uniqueidentifier tarafından ikinci gösterildiği gibi veri türü, INSERT deyim.

USE AdventureWorks2008R2;
GO
IF OBJECT_ID ('dbo.T1', 'U') IS NOT NULL
    DROP TABLE dbo.T1;
GO
CREATE TABLE dbo.T1 
(
    column_1 int IDENTITY, 
    column_2 uniqueidentifier,
);
GO
INSERT INTO dbo.T1 (column_2) 
    VALUES (NEWID());
INSERT INTO T1 DEFAULT VALUES; 
GO
SELECT column_1, column_2
FROM dbo.T1;
GO

D.kullanıcı tanımlı tür sütunlara veri ekleme

Aşağıdaki Transact-SQL deyimleri üç satır Ekle PointValue sütun Points tablo.Bu sütun kullanan bir CLR kullanıcı tanımlı türü (UDT).Point Veri türü oluşur x ve y tamsayı değerlerini UDTözellikler olarak sunulmuştur.Virgülle ayrılmış atama yapmak için ya da cast veya convert işlev kullanmalısınız x ve y değerleri Point türü.İlk iki ifade, bir dize değeri dönüştürmek için dönüştürme işlev kullanmak Point türü ve üçüncü deyim kullanan cast işlev.Daha fazla bilgi için, bkz. udt veri işleme.

INSERT INTO dbo.Points (PointValue) VALUES (CONVERT(Point, '3,4'));
INSERT INTO dbo.Points (PointValue) VALUES (CONVERT(Point, '1,5'));
INSERT INTO dbo.Points (PointValue) VALUES (CAST ('1,99' AS Point));

Diğer tablolardan veri ekleme

Bu bölümdeki örnekler, satırları bir tablo başka bir tabloekleme yöntemleri göstermektedir.

A.Diğer tablolardaki verileri eklemek için seçin ve Yürütme Seçenekleri'ni kullanarak

Aşağıdaki örnek, veri INSERT… kullanarak bir tablo başka bir tablo eklemek nasıl gösterir.SEÇİN veya INSERT…YÜRÜTME.Her sütun listesinden bir ifade ve bir hazýr bilgi deðeri içeren bir multi -tablo select deyim dayanır.

kaynak tablodan verileri türetmek için bir select deyim ilk INSERT deyim kullanır (Employee, SalesPerson, ve Person) ve sonuç kümesi store EmployeeSales tablo.İkinci INSERT deyim yürütme yan tümce select deyimiçeren bir saklı yordam çağırmak için ve üçüncü INSERT yan tümce execute bir hazır bilgi dizeolarak select deyim başvurmak için kullanır.

USE AdventureWorks2008R2;
GO
IF OBJECT_ID ('dbo.EmployeeSales', 'U') IS NOT NULL
    DROP TABLE dbo.EmployeeSales;
GO
IF OBJECT_ID ('dbo.uspGetEmployeeSales', 'P') IS NOT NULL
    DROP PROCEDURE uspGetEmployeeSales;
GO
CREATE TABLE dbo.EmployeeSales
( DataSource   varchar(20) NOT NULL,
  BusinessEntityID   varchar(11) NOT NULL,
  LastName     varchar(40) NOT NULL,
  SalesDollars money NOT NULL
);
GO
CREATE PROCEDURE dbo.uspGetEmployeeSales 
AS 
    SET NOCOUNT ON;
    SELECT 'PROCEDURE', sp.BusinessEntityID, c.LastName, 
        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 sp.BusinessEntityID, c.LastName;
GO
--INSERT...SELECT example
INSERT INTO dbo.EmployeeSales
    SELECT 'SELECT', sp.BusinessEntityID, c.LastName, 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 sp.BusinessEntityID, c.LastName;
GO
--INSERT...EXECUTE procedure example
INSERT INTO dbo.EmployeeSales 
EXECUTE dbo.uspGetEmployeeSales;
GO
--INSERT...EXECUTE('string') example
INSERT INTO dbo.EmployeeSales 
EXECUTE 
('
SELECT ''EXEC STRING'', sp.BusinessEntityID, c.LastName, 
    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 sp.BusinessEntityID, c.LastName
');
GO
--Show results.
SELECT DataSource,BusinessEntityID,LastName,SalesDollars
FROM dbo.EmployeeSales;
GO

B.Eklenen verileri tanımlamak için ortak tablo ifade kullanma

Aşağıdaki örnek oluşturur NewEmployee tablo.Ortak bir tablo ifade (EmployeeTemp) için bir veya daha fazla tablodan satırları tanımlayan NewEmployee tablo.Ortak tabloifadeiçindeki sütunları INSERT deyim başvurur.

USE AdventureWorks2008R2;
GO
IF OBJECT_ID (N'HumanResources.NewEmployee', N'U') IS NOT NULL
    DROP TABLE HumanResources.NewEmployee;
GO
CREATE TABLE HumanResources.NewEmployee
(
    EmployeeID int NOT NULL,
    LastName nvarchar(50) NOT NULL,
    FirstName nvarchar(50) NOT NULL,
    PhoneNumber Phone NULL,
    AddressLine1 nvarchar(60) NOT NULL,
    City nvarchar(30) NOT NULL,
    State nchar(3) NOT NULL, 
    PostalCode nvarchar(15) NOT NULL,
    CurrentFlag Flag
);
GO
WITH EmployeeTemp (EmpID, LastName, FirstName, Phone, 
                   Address, City, StateProvince, 
                   PostalCode, CurrentFlag)
AS (SELECT 
       e.BusinessEntityID, c.LastName, c.FirstName, pp.PhoneNumber,
       a.AddressLine1, a.City, sp.StateProvinceCode, 
       a.PostalCode, e.CurrentFlag
    FROM HumanResources.Employee e
        INNER JOIN Person.BusinessEntityAddress AS bea
        ON e.BusinessEntityID = bea.BusinessEntityID
        INNER JOIN Person.Address AS a
        ON bea.AddressID = a.AddressID
        INNER JOIN Person.PersonPhone AS pp
        ON e.BusinessEntityID = pp.BusinessEntityID
        INNER JOIN Person.StateProvince AS sp
        ON a.StateProvinceID = sp.StateProvinceID
        INNER JOIN Person.Person as c
        ON e.BusinessEntityID = c.BusinessEntityID
    )
INSERT INTO HumanResources.NewEmployee 
    SELECT EmpID, LastName, FirstName, Phone, 
           Address, City, StateProvince, PostalCode, CurrentFlag
    FROM EmployeeTemp;
GO

C.ÜST kaynaktabloeklenen verileri sınırlamak için kullanma

Aşağıdaki örnek ÜSTÜNE eklenen satır sayısını sınırlamak içinyan tümce NewEmployeetablo Employeetablo. Örnek ilk rasgele küme , 10 çalışanlardan adres verilerini ekler Employeeit.tablo select deyim içeriğini doğrulamak için yürütülür NewEmployee tablo.

USE AdventureWorks2008R2;
GO
IF OBJECT_ID (N'HumanResources.NewEmployee', N'U') IS NOT NULL
    DROP TABLE HumanResources.NewEmployee;
GO
CREATE TABLE HumanResources.NewEmployee
(
    BusinessEntityID int NOT NULL,
    LastName nvarchar(50) NOT NULL,
    FirstName nvarchar(50) NOT NULL,
    PhoneNumber Phone NULL,
    AddressLine1 nvarchar(60) NOT NULL,
    City nvarchar(30) NOT NULL,
    State nchar(3) NOT NULL, 
    PostalCode nvarchar(15) NOT NULL,
    CurrentFlag Flag
);
GO
-- Insert 10 random rows into the table NewEmployee.
INSERT TOP (10) INTO HumanResources.NewEmployee 
    SELECT
       e.BusinessEntityID, c.LastName, c.FirstName, pp.PhoneNumber,
       a.AddressLine1, a.City, sp.StateProvinceCode, 
       a.PostalCode, e.CurrentFlag
    FROM HumanResources.Employee e
        INNER JOIN Person.BusinessEntityAddress AS bea
        ON e.BusinessEntityID = bea.BusinessEntityID
        INNER JOIN Person.Address AS a
        ON bea.AddressID = a.AddressID
        INNER JOIN Person.PersonPhone AS pp
        ON e.BusinessEntityID = pp.BusinessEntityID
        INNER JOIN Person.StateProvince AS sp
        ON a.StateProvinceID = sp.StateProvinceID
        INNER JOIN Person.Person as c
        ON e.BusinessEntityID = c.BusinessEntityID;
GO
SELECT  BusinessEntityID, LastName, FirstName, PhoneNumber,
        AddressLine1, City, State, PostalCode, CurrentFlag
FROM HumanResources.NewEmployee;
GO

Hedef nesne standart tablolar dışındaki belirtme

Bu bölümdeki örnekler, bir görünüm veya tablo değişkeni belirterek satır eklemek nasıl gösterilmektedir.

A.Görünüm belirterek veri ekleme

Aşağıdaki örnek, hedef nesne olarak bir görünüm adı belirtir; Ancak, temel temel tabloyeni bir satır eklenir.Değerlerin sırasını INSERT deyim görünümünde sütun sırasını aynı olmalıdır.Daha fazla bilgi için, bkz. Bir görünüm üzerinden veri değiştirme.

USE AdventureWorks2008R2;
GO
IF OBJECT_ID ('dbo.T1', 'U') IS NOT NULL
    DROP TABLE dbo.T1;
GO
IF OBJECT_ID ('dbo.V1', 'V') IS NOT NULL
    DROP VIEW dbo.V1;
GO
CREATE TABLE T1 ( column_1 int, column_2 varchar(30));
GO
CREATE VIEW V1 AS 
SELECT column_2, column_1 
FROM T1;
GO
INSERT INTO V1 
    VALUES ('Row 1',1);
GO
SELECT column_1, column_2 
FROM T1;
GO
SELECT column_1, column_2
FROM V1;
GO

B.Veri bir tablo değişkeni ekleme

Aşağıdaki örnek, hedef nesne olarak bir tablo değişkeni belirtir.

USE AdventureWorks2008R2;
GO
-- Create the table variable.
DECLARE @MyTableVar table(
    LocationID int NOT NULL,
    CostRate smallmoney NOT NULL,
    NewCostRate AS CostRate * 1.5,
    ModifiedDate datetime);

-- Insert values into the table variable.
INSERT INTO @MyTableVar (LocationID, CostRate, ModifiedDate)
    SELECT LocationID, CostRate, GETDATE() FROM Production.Location
    WHERE CostRate > 0;

-- View the table variable result set.
SELECT * FROM @MyTableVar;
GO  

Uzak tabloya satır eklemek

Bu bölümdeki örnekler kullanarak uzak hedef tablo satır eklemek nasıl gösterilmektedir bir bağlantılı sunucu veya bir satır kümesi işlev uzak tablobaşvurmak için.

A.bağlantılı sunucukullanarak verileri uzak tablo ekleme

Aşağıdaki örnek satır uzak tabloekler.uzak verikaynak bir bağlantı kullanarak oluşturarak örnek başlar sp_addlinkedserver. bağlantılı sunucu adı MyLinkServer, sonra formunda dört nesne adının bir parçası olarak belirtilen server.catalog.schema.object.

USE master;
GO
-- Create a link to the remote data source. 
-- Specify a valid server name for @datasrc as 'server_name' or 'server_name\instance_name'.

EXEC sp_addlinkedserver @server = N'MyLinkServer',
    @srvproduct = N' ',
    @provider = N'SQLNCLI', 
    @datasrc = N'server_name',
    @catalog = N'AdventureWorks2008R2';
GO
USE AdventureWorks2008R2;
GO
-- Specify the remote data source in the FROM clause using a four-part name 
-- in the form linked_server.catalog.schema.object.

INSERT INTO MyLinkServer.AdventureWorks2008R2.HumanResources.Department (Name, GroupName)
VALUES (N'Public Relations', N'Executive General and Administration');
GO

B.SORGUAÇ işlevkullanarak verileri uzak tablo ekleme

Aşağıdaki örnek, belirterek uzak tablo bir satır ekler SORGUAÇ satır kümesi işlev.Bu örnekte, önceki örnekte oluşturulmuş bağlantılı sunucu adı kullanılır.

-- Use the OPENQUERY function to access the remote data source.

INSERT OPENQUERY (MyLinkServer, 'SELECT Name, GroupName FROM AdventureWorks2008R2.HumanResources.Department')
VALUES ('Environmental Impact', 'Engineering');
GO

C.opendatasource işlevkullanarak verileri uzak tablo ekleme

Aşağıdaki örnek, belirterek uzak tablo bir satır ekler opendatasource satır kümesi işlev.Biçimi kullanarak sunucu adı geçerli bir veri kaynak belirtmek sunucu_adı veya server_name\instance_name.

-- Use the OPENDATASOURCE function to specify the remote data source.
-- Specify a valid server name for Data Source using the format server_name or server_name\instance_name.

INSERT INTO OPENDATASOURCE('SQLNCLI',
    'Data Source= <server_name>; Integrated Security=SSPI')
    .AdventureWorks2008R2.HumanResources.Department (Name, GroupName)
    VALUES (N'Standards and Methods', 'Quality Assurance');
GO

Toplu veri tabloları veya veri dosyaları içe aktarma

Bu bölümdeki örnekler, INSERT deyimkullanarak, tablo veri toplu alma (toplu yükleme) iki yöntemi göstermektedir.

A.Minimal günlüğü ile yığın ekleme veri

Aşağıdaki örnek oluşturur bir yeni tablo (yığın) ve başka bir tablo içine en az bir günlük kullanarak veri ekler.Örnek varsayar kurtarma modeli, AdventureWorks2008R2 veritabanı olan küme için dolu.En az bir günlük olduğundan emin olmak için kullanılan, kurtarma modeli, AdventureWorks2008R2 veritabanı olan küme bulk_logged önce satır eklenir ve sonra Ekle INTO… tam olarak Sıfırlaselect deyim.Buna ek olarak, hedeftablotablock ipucu belirtilenSales.SalesHistory. Bu deyim hareket günlüğündeki en az alanı kullanır ve verimli bir şekilde gerçekleştiren sağlar.

USE AdventureWorks2008R2;
GO
-- Create the target heap.
CREATE TABLE Sales.SalesHistory(
    SalesOrderID int NOT NULL,
    SalesOrderDetailID int NOT NULL,
    CarrierTrackingNumber nvarchar(25) NULL,
    OrderQty smallint NOT NULL,
    ProductID int NOT NULL,
    SpecialOfferID int NOT NULL,
    UnitPrice money NOT NULL,
    UnitPriceDiscount money NOT NULL,
    LineTotal money NOT NULL,
    rowguid uniqueidentifier ROWGUIDCOL  NOT NULL,
    ModifiedDate datetime NOT NULL );
GO
-- Temporarily set the recovery model to BULK_LOGGED.
ALTER DATABASE AdventureWorks2008R2
SET RECOVERY BULK_LOGGED;
GO
-- Transfer data from Sales.SalesOrderDetail to Sales.SalesHistory
INSERT INTO Sales.SalesHistory WITH (TABLOCK)
    (SalesOrderID, 
     SalesOrderDetailID,
     CarrierTrackingNumber, 
     OrderQty, 
     ProductID, 
     SpecialOfferID, 
     UnitPrice, 
     UnitPriceDiscount,
     LineTotal, 
     rowguid, 
     ModifiedDate)
SELECT * FROM Sales.SalesOrderDetail;
GO
-- Reset the recovery model.
ALTER DATABASE AdventureWorks2008R2
SET RECOVERY FULL;
GO

B.openrowset işlev bulk ile toplu alma veri tablokullanarak

Aşağıdaki örnekte satır bir veri dosyasından tablo openrowset işlevbelirterek ekler.IGNORE_TRIGGERS tablo ipucu performansı iyileştirmek için belirtilir.Daha fazla örnek için, bkz. Toplu veri bulk INSERT veya openrowset(bulk...) kullanarak alma.

-- Use the OPENROWSET function to specify the data source and specifies the IGNORE_TRIGGERS table hint.
INSERT INTO HumanResources.Department WITH (IGNORE_TRIGGERS) (Name, GroupName)
SELECT b.Name, b.GroupName 
FROM OPENROWSET (
    BULK 'C:\SQLFiles\DepartmentData.txt',
    FORMATFILE = 'C:\SQLFiles\BulkloadFormatFile.xml',
    ROWS_PER_BATCH = 15000)AS b ;
GO

İpuçlarını kullanarak sorgu en iyi duruma getiricisi varsayılan davranışını geçersiz kılma

Bu bölümdeki örnekler göstermektedir nasıl kullanılacağını tablo ipuçlarını sorgu iyileştiricisi varsayılan davranışını INSERT deyimişlerken geçici olarak geçersiz kılmak için.

Dikkat notuDikkat

Çünkü SQL Server sorgu iyileştiricisi genellikle bir sorgu için en iyi yürütme planını seçer, ipuçları yalnızca son çare olarak deneyimli geliştiriciler ve veritabanı yöneticileri tarafından kullanılması önerilir.

A.Kilitleme yöntembelirtmek için tablock ipucu kullanma

Aşağıdaki örnek, bir özel (x) kilit tabloalınır belirtirProduction.Location ve INSERT deyimsonuna kadar tutuluyor.

USE AdventureWorks2008R2;
GO
INSERT INTO Production.Location WITH (XLOCK)
(Name, CostRate, Availability)
VALUES ( N'Final Inventory', 15.00, 80.00);
GO

INSERT deyimi sonuçları yakalama

Bu bölümdeki örnekler göstermektedir nasıl kullanılacağını output yan tümcesi iade bilgileri veya ifadeler esas alan, INSERT deyimtarafından etkilenen her satı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.

Bir INSERT deyimile kullanma çıktı

Aşağıdaki örnek bir satıra ekler ScrapReasontablo output yan tümce deyim sonuçlar döndürmek için kullanır ve @MyTableVartablo değişkeni. Çünkü ScrapReasonIDsütun ScrapReasontablo bir kimlik özellikile tanımlanan, bir değer o sütuniçin INSERT deyim belirtilmemiş. Ancak değeri tarafından üretilen dikkat Veritabanı Altyapısı o sütun çıktı yan tümce tümcesinde iade için INSERTED.ScrapReasonID sütun.

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.Çıktı kullanarak kimlik ve hesaplanan sütunları

Aşağıdaki örnek oluşturur EmployeeSalestablo ve birkaç satır kaynak tablodan veri almak için bir select deyim INSERT deyim kullanarak içine ekler. EmployeeSalestablo kimlik sütun içerir ( EmployeeID) ve hesaplanmış bir sütun (ProjectedSales).Çünkü bu değerler tarafından üretilen 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

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

Aşağıdaki örnek, çıktı yan tümce birleştirme deyimdöndürülen verileri yakalar ve bu verilerin başka bir tabloekler.BİRLEŞTİRME deyim güncelleştirmeleri Quantity sütun ProductInventory tablo her gün, esas işlenir siparişleri SalesOrderDetail tablo.Ayrıca, satır, stoklar için 0 bırak ürünler için siler.Ö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;