Aracılığıyla paylaş


Tablo değeri Oluşturucu (Transact-SQL)

Bir küme tablooluşturulması için satır değeri ifade belirtir.Transact-SQLtablo değeri Oluşturucu birden çok tek DMLdeyimbelirtilen veri satırı sağlar. tablo değeri Oluşturucu in the values yan tümce INSERT deyimkullanarak, belirtilen <kaynaktablo>yan tümce deyimbirleştirme ve tanımı from yan tümcetümcesinde türetilmiş bir tablo .

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

Sözdizimi

VALUES ( <row value expression list> ) [ ,...n ] 

<row value expression list> ::=
    {<row value expression> } [ ,...n ]

<row value expression> ::=
    { DEFAULT | NULL | expression }

Bağımsız değişkenler

  • VALUES
    Satır değeri ifade listeleri tanıtır.Her liste ayraç içinde ve virgülle ayrılmış olmalıdır.

    Her listede belirtilen değerlerin sayısı aynı olmalıdır ve değerleri tablosütunlar aynı sırada olmalıdır.tablo her sütun için bir değer belirtilmiş olmalı veya sütun listesinden gelen her değer için sütunları açıkça belirtmeniz gerekir.

  • VARSAYILAN
    Güçleri Veritabanı Altyapısı bir sütuniçin tanımlanan varsayılan değeri eklemek.null varsayılan sütun yok ve sütun null değerlere izin verir, eklenir.Varsayılan kimlik sütuniçin geçerli değil. tablo değeri oluşturucu içinde belirtildiğinde, varsayılan yalnızca INSERT deyimiçinde izin verilir.

  • expression
    Bir sabit, değişken veya ifadeedilir.ifade bir execute deyimiçeremez.

Sınırlamalar ve kısıtlamalar

tablo değeri Oluşturucu kullanılarak oluşturulmuş olabilir satır en fazla sayısı 1000'dir.1000'den fazla satır eklemek için birden fazla INSERT deyimleri veya toplu alma veri kullanarak oluşturmak bcp yardımcı programını veya bulk INSERT deyim.

Yalnızca tek skaler değerler bir satır değeri ifadeolarak verilir.Birden çok sütun içeren bir alt sorgu bir satır değeri ifadeolarak izin verilmez.Örneğin, üçüncü satır değeri nedeniyle ifade listesi sözdizimi hatası aşağıdaki kodu sonuçlar birden çok sütun içeren bir alt sorgu içermektedir.

USE AdventureWorks2008R2;
GO
CREATE TABLE dbo.MyProducts (Name varchar(50), ListPrice money);
GO
-- This statement fails because the third values list contains multiple columns in the subquery.
INSERT INTO dbo.MyProducts (Name, ListPrice)
VALUES ('Helmet', 25.50),
       ('Wheel', 30.00),
       (SELECT Name, ListPrice FROM Production.Product WHERE ProductID = 720);
GO

Ancak, deyim her sütun ayrı ayrı alt sorgu içinde belirterek yonunu.Aşağıdaki örnek, başarılı bir şekilde üç satır ekler MyProducts tablo.

INSERT INTO dbo.MyProducts (Name, ListPrice)
VALUES ('Helmet', 25.50),
       ('Wheel', 30.00),
       ((SELECT Name FROM Production.Product WHERE ProductID = 720),
        (SELECT ListPrice FROM Production.Product WHERE ProductID = 720));
GO

Veri Türleri

Birden fazla satır INSERT deyim belirtilen değerleri veri türü dönüştürme özellikleri UNION all sözdizimi izleyin.Bu sonuçlar eşleşmeyen türler örtük dönüştürme daha yüksek bir tür Öncelik.Dönüştürme desteklenen bir örtük dönüştürme değilse, bir hata döndürülür.Örneğin, aşağıdaki deyim bir sütun türü bir tamsayı ve karakter değeri ekler char.

CREATE TABLE dbo.t (a int, b char);
GO
INSERT INTO dbo.t VALUES (1,'a'), (2, 1);
GO

INSERT deyim çalıştırdığınızda, SQL Server dönüştürmek çalışır 'a' veri türü için bir tamsayı öncelik tamsayı bir karakter türünden daha yüksek bir türü olduğunu gösterir.Dönüştürme başarısız olur ve bir hata döndürdü.Hata değerleri gerektiği açıkça dönüştürerek önleyebilirsiniz.Örneğin, önceki deyim aşağıdaki gibi yazılabilir.

INSERT INTO dbo.t VALUES (1,'a'), (2, CONVERT(CHAR,1));

Örnekler

A.Birden çok veri satırı ekleme

Aşağıdaki örnek tablooluştururdbo.Departments ve beş satır tabloeklemek için tablo değeri Oluşturucu kullanır. Çü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

B.Varsayılan ve null değerleri ile birden çok satır ekleme

Aşağıdaki örnek, satır tabloeklemek için tablo değeri Oluşturucu kullanırken belirten varsayılan ve null gösterir.

USE AdventureWorks2008R2;
GO
CREATE TABLE Sales.MySalesReason(
    SalesReasonID int IDENTITY(1,1) NOT NULL,
    Name dbo.Name NULL ,
    ReasonType dbo.Name NOT NULL DEFAULT 'Not Applicable' );
GO
INSERT INTO Sales.MySalesReason 
VALUES ('Recommendation','Other'), ('Advertisement', DEFAULT), (NULL, 'Promotion');

SELECT * FROM Sales.MySalesReason;

C.from yan tümcetümcesinde türetilmiş bir tablo olarak birden çok değer belirtme

Aşağıdaki örnek, from yan tümce select deyimiçinde birden çok değer belirtmek için tablo değeri Oluşturucu kullanır.

SELECT a, b FROM (VALUES (1, 2), (3, 4), (5, 6), (7, 8), (9, 10) ) AS MyTable(a, b);
GO

D.Bir birleştirme deyimtüretilmiş kaynaktablo olarak birden çok değer belirtme

Aşağıdaki örnek, değişiklik yapmak için birleştirme kullanır satır ekleme veya güncelleştirme tarafındanSalesReasontablo . Zaman değeri NewName kaynaktablo bir değere uyan Name hedeftablosütun ( SalesReason), ReasonType hedeftablosütun güncelleştirilir. Zaman değeri NewName eşleşmezse, kaynak satır eklendiğinde hedef tablomu.kaynaktablo kullanır türetilmiş bir tablo olan Transact-SQLbirden çok satır kaynaktablobelirlemek içintablo değeri Oluşturucu. 

USE AdventureWorks2008R2;
GO
-- Create a temporary table variable to hold the output actions.
DECLARE @SummaryOfChanges TABLE(Change VARCHAR(20));

MERGE INTO Sales.SalesReason AS Target
USING (VALUES ('Recommendation','Other'), ('Review', 'Marketing'), ('Internet', 'Promotion'))
       AS Source (NewName, NewReasonType)
ON Target.Name = Source.NewName
WHEN MATCHED THEN
    UPDATE SET ReasonType = Source.NewReasonType
WHEN NOT MATCHED BY TARGET THEN
    INSERT (Name, ReasonType) VALUES (NewName, NewReasonType)
OUTPUT $action INTO @SummaryOfChanges;

-- Query the results of the table variable.
SELECT Change, COUNT(*) AS CountPerChange
FROM @SummaryOfChanges
GROUP BY Change;