Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

VALUES-Klausel in SQL Server

In SQL Server VALUES ist ein Tabellenwertkonstruktor, der einen Satz von Zeilenwertausdrücken angibt, die in eine Tabelle konstruiert werden sollen.

Die VALUES -Klausel wird häufig mit INSERT verwendet Anweisungen zum Einfügen von Daten, aber es kann auch als abgeleitete Tabelle in den USING -Klausel des MERGE -Anweisung oder die FROM Klausel.

Syntax

VALUES ( <row value expression list> ) [ ,...n ]   
  
<row value expression list> ::=  
    {<row value expression> } [ ,...n ]  
  
<row value expression> ::=  
    { DEFAULT | NULL | expression } 

Beachten Sie, dass DEFAULT ist nur in einem INSERT erlaubt Erklärung. DEFAULT zwingt SQL Server, den für die Spalte definierten Standardwert einzufügen. Wenn für die Spalte kein Standardwert existiert und die Spalte Nullwerte zulässt, NULL wird eingefügt. DEFAULT kann nicht für Identitätsspalten verwendet werden.

Beispiele

Hier sind einige Beispiele, die zeigen, wie VALUES kann in SQL Server verwendet werden.

Wird in einem INSERT verwendet Aussage

Hier ist ein Beispiel für die Verwendung von VALUES -Klausel als Teil eines INSERT Anweisung:

CREATE TABLE Idiots (
    IdiotId int IDENTITY(1,1) NOT NULL,
    FirstName varchar(50),
    LastName varchar(50)
    );

INSERT INTO Idiots VALUES 
    ('Peter', 'Griffin'), 
    ('Homer', 'Simpson'), 
    ('Ned', 'Flanders'); 

Dadurch wurde eine Tabelle namens Idiots erstellt und fügte drei Zeilen ein.

Wir können jetzt ein SELECT verwenden -Anweisung, um die neuen Werte in der Tabelle anzuzeigen:

SELECT * FROM Idiots; 

Ergebnis:

+-----------+------------+------------+| IdiotId | Vorname | Nachname ||-----------+------------+------------|| 1 | Peter | Greif || 2 | Homer | Simpson || 3 | Ned | Flandern |+-----------+------------+------------+

Wenn die VALUES -Klausel wird in einem INSERT verwendet -Anweisung gibt es ein Limit von 1000 Zeilen. Eine Möglichkeit, dies zu umgehen, ist die Verwendung von VALUES in einem SELECT -Anweisung zum Erstellen einer abgeleiteten Tabelle. Das erspart uns die mehrfache Verwendung von INSERT Anweisungen oder Masseneinfügung.

Wird in einem SELECT verwendet Aussage

Wir können VALUES verwenden um eine abgeleitete Tabelle im FROM zu erstellen Klausel. Hier ist ein SELECT Anweisung zu demonstrieren:

SELECT
   FirstName,
   LastName
FROM
   (VALUES 
        (1, 'Peter', 'Griffin'),
        (2, 'Homer', 'Simpson'),
        (3, 'Ned', 'Flanders')
   ) AS Idiots(IdiotId, FirstName, LastName)
WHERE IdiotId = 2; 

Ergebnis:

+-------------+------------+| Vorname | Nachname ||-------------+------------|| Homer | Simpson |+-------------+------------+

Abgeleitete Tabellen können verwendet werden, um die Grenze von 1000 Zeilen beim Einfügen von Werten in eine Datenbank zu überwinden.

Wird in einem MERGE verwendet Aussage

Hier ist ein Beispiel für VALUES in einem MERGE verwendet wird Aussage:

DECLARE @Changes TABLE(Change VARCHAR(20));

MERGE INTO Idiots AS Target  
USING ( VALUES 
            (3, 'Ned', 'Okily Dokily!'), 
            (4, 'Lloyd','Christmas'), 
            (5, 'Harry', 'Dunne')
        ) AS Source ( IdiotId, FirstName, LastName )  
ON Target.IdiotId = Source.IdiotId
AND Target.FirstName = Source.FirstName
WHEN MATCHED THEN
    UPDATE SET FirstName = Source.FirstName, LastName = Source.LastName
WHEN NOT MATCHED BY TARGET THEN
    INSERT (FirstName, LastName) VALUES (Source.FirstName, Source.LastName)
OUTPUT $action INTO @Changes;

SELECT Change, COUNT(*) AS Count  
FROM @Changes  
GROUP BY Change; 

Ergebnis:

+----------+---------+| Ändern | Zähle ||----------+---------|| EINFÜGEN | 2 || AKTUALISIEREN | 1 |+----------+---------+

In diesem Fall wurde basierend auf den in VALUES angegebenen Werten eine Zeile aktualisiert und zwei neue Zeilen eingefügt Klausel.

Hier ist nun die Ergebnistabelle:

SELECT * FROM Idiots; 

Ergebnis:

+-----------+------------+---------------+| IdiotId | Vorname | Nachname ||-----------+-------------+---------------|| 1 | Peter | Greif || 2 | Homer | Simpson || 3 | Ned | Okay Dokily! || 4 | Lloyd | Weihnachten || 5 | Harry | Dunne |+-----------+---------------------+---------------+