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: