Konstruktor wartość tabela (języka Transact-SQL)

Określa zestaw wierszy wartość wyrażenia można skonstruować do tabela.The Transact-SQL tabela value constructor allows multiple rows of data to be specified in a single DML instrukcja. Konstruktor wartość tabeli mogą być określone w klauzuli VALUES w przy użyciu instrukcja INSERT <Tabela źródłowa> Klauzula instrukcja korespondencji SERYJNEJ, a w definicji tabeli pochodnej w klauzuli FROM.

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

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

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

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

Argumenty

  • VALUES
    Wprowadzono wyrażenie list wartości wiersza.Każda lista muszą być ujęte w nawiasy i oddzielone przecinkami.

    Liczba wartości określone na każdej liście muszą być takie same i wartości muszą być w tej samej kolejności, w kolumnach tabela.Należy określić wartość dla każdej kolumna w tabela lub listy kolumn należy jawnie określić kolumna dla każdej wartości przychodzących.

  • WARTOŚĆ DOMYŚLNA
    Wymusza Database Engine Aby wstawić wartość domyślną dla kolumna. Jeśli domyślnie nie istnieje dla kolumna, a kolumna dozwolone wartości null, zostanie wstawiony wartości NULL.DOMYŚLNY nie jest prawidłowy dla kolumna tożsamości.Po określeniu w Konstruktorze tabela wartość DEFAULT jest dozwolone tylko w instrukcja INSERT.

  • expression
    Jest stała, zmienna lub wyrażenie.Wyrażenie nie może zawierać instrukcja wykonać.

Ograniczenia i ograniczenia

Maksymalna liczba wierszy, które mogą być wykonane za pomocą konstruktora wartość tabela wynosi 1000.Aby wstawić więcej niż 1000 wierszy, utwórz wiele instrukcja INSERT lub import zbiorczy danych przy użyciu BCP narzędzia lub instrukcja BULK INSERT.

Tylko pojedynczych wartości wartość skalarna można użyć jako wyrażenie wartości wiersza.Nie można użyć podkwerenda, która wiąże się z wielu kolumn jako wyrażenie wartości wiersza.Na przykład, poniższy kod wyniki w składnię błąd ponieważ lista wyrażenie trzeci wiersz zawiera podkwerenda zawierających wiele kolumn.

Ponownie zapisywane, tak jednak instrukcja może być przechowywały określając każdej kolumna w podkwerendzie oddzielnie.W poniższym przykładzie pomyślnie wstawia trzy wiersze MyProducts Tabela.

Typy danych

Wartości określone w multi-row instrukcja INSERT, postępuj zgodnie z właściwości konwersji typów danych UNION ALL składni.Powoduje to niejawna konwersja typu niedopasowanych typu wyższe pierwszeństwo.Jeśli konwersja nie jest obsługiwane niejawna konwersja, zwracany jest błąd.Na przykład następująca instrukcja Wstawia całkowitą i wartość znaku kolumna Typ char.

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

Po uruchomieniu instrukcja INSERT SQL Server próbuje przekonwertować 'a' całkowitą ponieważ priorytet typu danych oznacza, że liczbę całkowitą typu wyższe niż znak. Konwersja nie powiedzie się i zwracany jest błąd.Aby uniknąć błędu, można jawnie konwersji wartości odpowiednio.Na przykład Poprzednia mogą być zapisywane w następujący sposób.

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

Przykłady

A.Wstawianie wielu wierszy danych

Poniższy przykład tworzy w tabela dbo.Departments a następnie używa konstruktora wartość tabela wstawić pięć wierszy do tabela. Ponieważ wartości we wszystkich kolumnach są dostarczane i są wyświetlane w kolejności kolumn w tabela, nazwy kolumn nie mają być określone na liście kolumn.

B.Wstawianie wielu wierszy z wartością domyślny i wartości NULL

W poniższym przykładzie zademonstrowano Określanie domyślny i wartości NULL, wstawianie wierszy do tabela za pomocą konstruktora wartość tabela.

C.Określanie wielu wartości w tabela pochodnej w klauzula FROM

W poniższym przykładzie użyto konstruktora wartość tabela, aby określić wiele wartości w klauzula FROM instrukcja SELECT.

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

D.Określanie wielu wartości jako tabela źródłowej pochodnych w instrukcja korespondencji SERYJNEJ

W poniższym przykładzie użyto korespondencji SERYJNEJ, aby zmodyfikować SalesReason Tabela uaktualniania lub wstawiania wierszy. Gdy wartość NewName w urządzenie źródłowe tabela odpowiada wartości w Name kolumny w tabela miejsce docelowe)SalesReason), ReasonType Kolumna jest aktualizowany w tabela miejsce docelowe. Gdy wartość NewName nie, nie pasuje, wiersz urządzenie źródłowe jest wstawiany do tabela miejsce docelowe. Tabela źródłowa jest tabeli pochodnej, która korzysta z Transact-SQL Konstruktor wartość tabeli do określenia wielu wierszy w tabeli źródłowej.