Dans SQL Server, VALUES est un constructeur de valeur de table qui spécifie un ensemble d'expressions de valeur de ligne à construire dans une table.
Les VALUES la clause est souvent utilisée avec INSERT instructions pour insérer des données, mais il peut également être utilisé comme table dérivée dans le USING clause de la MERGE déclaration ou le FROM clause.
Syntaxe
VALUES ( <row value expression list> ) [ ,...n ]
<row value expression list> ::=
{<row value expression> } [ ,...n ]
<row value expression> ::=
{ DEFAULT | NULL | expression }
Notez que DEFAULT n'est autorisé que dans un INSERT déclaration. DEFAULT force SQL Server à insérer la valeur par défaut définie pour la colonne. Si une valeur par défaut n'existe pas pour la colonne et que la colonne autorise les valeurs nulles, NULL est inséré. DEFAULT ne peut pas être utilisé sur les colonnes d'identité.
Exemples
Voici quelques exemples qui montrent comment VALUES peut être utilisé dans SQL Server.
Utilisé dans un INSERT Déclaration
Voici un exemple d'utilisation des VALUES clause dans le cadre d'un INSERT déclaration :
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');
Cela a créé une table appelée Idiots et y ai inséré trois lignes.
Nous pouvons maintenant utiliser un SELECT pour voir les nouvelles valeurs dans le tableau :
SELECT * FROM Idiots; Résultat :
+-----------+-------------+------------+ | IdiotId | FirstName | LastName | |-----------+-------------+------------| | 1 | Peter | Griffin | | 2 | Homer | Simpson | | 3 | Ned | Flanders | +-----------+-------------+------------+
Lorsque les VALUES la clause est utilisée dans un INSERT instruction, il y a une limite de 1000 lignes. Une façon de surmonter cela consiste à utiliser VALUES dans un SELECT instruction pour créer une table dérivée. Cela nous évite d'avoir à utiliser plusieurs INSERT déclarations ou faire une insertion en masse.
Utilisé dans un SELECT Déclaration
Nous pouvons utiliser VALUES pour créer une table dérivée dans le FROM clause. Voici un SELECT déclaration à démontrer :
SELECT
FirstName,
LastName
FROM
(VALUES
(1, 'Peter', 'Griffin'),
(2, 'Homer', 'Simpson'),
(3, 'Ned', 'Flanders')
) AS Idiots(IdiotId, FirstName, LastName)
WHERE IdiotId = 2; Résultat :
+-------------+------------+ | FirstName | LastName | |-------------+------------| | Homer | Simpson | +-------------+------------+
Les tables dérivées peuvent être utilisées pour dépasser la limite de 1000 lignes lors de l'insertion de valeurs dans une base de données.
Utilisé dans un MERGE Déclaration
Voici un exemple de VALUES utilisé dans un MERGE déclaration :
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; Résultat :
+----------+---------+ | Change | Count | |----------+---------| | INSERT | 2 | | UPDATE | 1 | +----------+---------+
Dans ce cas, une ligne a été mise à jour et deux nouvelles lignes ont été insérées, en fonction des valeurs fournies dans les VALUES clause.
Voici maintenant le tableau résultant :
SELECT * FROM Idiots; Résultat :
+-----------+-------------+---------------+ | IdiotId | FirstName | LastName | |-----------+-------------+---------------| | 1 | Peter | Griffin | | 2 | Homer | Simpson | | 3 | Ned | Okily Dokily! | | 4 | Lloyd | Christmas | | 5 | Harry | Dunne | +-----------+-------------+---------------+