In SQL Server, VALUES is een tabelwaardeconstructor die een reeks rijwaarde-expressies specificeert die in een tabel moeten worden geconstrueerd.
De VALUES clausule wordt vaak gebruikt met INSERT instructies om gegevens in te voegen, maar het kan ook worden gebruikt als een afgeleide tabel in de USING clausule van de MERGE statement of de FROM clausule.
Syntaxis
VALUES ( <row value expression list> ) [ ,...n ]
<row value expression list> ::=
{<row value expression> } [ ,...n ]
<row value expression> ::=
{ DEFAULT | NULL | expression }
Merk op dat DEFAULT is alleen toegestaan in een INSERT uitspraak. DEFAULT dwingt SQL Server om de standaardwaarde in te voegen die voor de kolom is gedefinieerd. Als er geen standaard voor de kolom bestaat en de kolom staat null-waarden toe, NULL wordt ingevoegd. DEFAULT kan niet worden gebruikt op identiteitskolommen.
Voorbeelden
Hier zijn enkele voorbeelden die laten zien hoe VALUES kan worden gebruikt in SQL Server.
Gebruikt in een INSERT Verklaring
Hier is een voorbeeld van het gebruik van de VALUES clausule als onderdeel van een INSERT verklaring:
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');
Dat creëerde een tabel met de naam Idiots en voegde er drie rijen in.
We kunnen nu een SELECT . gebruiken statement om de nieuwe waarden in de tabel te zien:
SELECT * FROM Idiots; Resultaat:
+-----------+-------------+------------+ | IdiotId | FirstName | LastName | |-----------+-------------+------------| | 1 | Peter | Griffin | | 2 | Homer | Simpson | | 3 | Ned | Flanders | +-----------+-------------+------------+
Wanneer de VALUES clausule wordt gebruikt in een INSERT statement, is er een limiet van 1000 rijen. Een manier om dit te verhelpen is door VALUES . te gebruiken in een SELECT statement om een afgeleide tabel te maken. Dat bespaart ons het gebruik van meerdere INSERT verklaringen of het doen van een bulkinvoeging.
Gebruikt in een SELECT Verklaring
We kunnen VALUES . gebruiken om een afgeleide tabel te maken in de FROM clausule. Hier is een SELECT verklaring om aan te tonen:
SELECT
FirstName,
LastName
FROM
(VALUES
(1, 'Peter', 'Griffin'),
(2, 'Homer', 'Simpson'),
(3, 'Ned', 'Flanders')
) AS Idiots(IdiotId, FirstName, LastName)
WHERE IdiotId = 2; Resultaat:
+-------------+------------+ | FirstName | LastName | |-------------+------------| | Homer | Simpson | +-------------+------------+
Afgeleide tabellen kunnen worden gebruikt om de limiet van 1000 rijen te overschrijden bij het invoegen van waarden in een database.
Gebruikt in een MERGE Verklaring
Hier is een voorbeeld van VALUES wordt gebruikt in een MERGE verklaring:
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; Resultaat:
+----------+---------+ | Change | Count | |----------+---------| | INSERT | 2 | | UPDATE | 1 | +----------+---------+
In dit geval is één rij bijgewerkt en zijn er twee nieuwe rijen ingevoegd, gebaseerd op de waarden in de VALUES clausule.
Dit is nu de resulterende tabel:
SELECT * FROM Idiots; Resultaat:
+-----------+-------------+---------------+ | IdiotId | FirstName | LastName | |-----------+-------------+---------------| | 1 | Peter | Griffin | | 2 | Homer | Simpson | | 3 | Ned | Okily Dokily! | | 4 | Lloyd | Christmas | | 5 | Harry | Dunne | +-----------+-------------+---------------+