I SQL Server, VALUES er en tabelværdikonstruktør, der specificerer et sæt rækkeværdiudtryk, der skal konstrueres til en tabel.
VALUES klausul bruges ofte sammen med INSERT sætninger til at indsætte data, men det kan også bruges som en afledt tabel i enten USING klausul i MERGE sætning eller FROM klausul.
Syntaks
VALUES ( <row value expression list> ) [ ,...n ]
<row value expression list> ::=
{<row value expression> } [ ,...n ]
<row value expression> ::=
{ DEFAULT | NULL | expression }
Bemærk, at DEFAULT er kun tilladt i en INSERT udmelding. DEFAULT tvinger SQL Server til at indsætte standardværdien defineret for kolonnen. Hvis der ikke findes en standard for kolonnen, og kolonnen tillader null-værdier, NULL er indsat. DEFAULT kan ikke bruges på identitetskolonner.
Eksempler
Her er nogle eksempler, der viser, hvordan VALUES kan bruges i SQL Server.
Bruges i en INSERT Erklæring
Her er et eksempel på brug af VALUES klausul som en del af en INSERT erklæring:
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');
Det skabte en tabel kaldet Idiots og indsatte tre rækker i den.
Vi kan nu bruge en SELECT sætning for at se de nye værdier i tabellen:
SELECT * FROM Idiots; Resultat:
+-------+-------------+------------+| IdiotId | Fornavn | Efternavn ||-----------+-------------+-----------|| 1 | Peter | Griffin || 2 | Homer | Simpson || 3 | Ned | Flandern |+-----------+-------------+------------+
Når VALUES klausul bruges i en INSERT sætning, er der en grænse på 1000 rækker. En måde at overvinde dette på er at bruge VALUES i en SELECT sætning for at oprette en afledt tabel. Det sparer os for at skulle bruge flere INSERT udsagn eller lave en masseindsættelse.
Bruges i en SELECT Erklæring
Vi kan bruge VALUES at oprette en afledt tabel i FROM klausul. Her er en SELECT erklæring for at demonstrere:
SELECT
FirstName,
LastName
FROM
(VALUES
(1, 'Peter', 'Griffin'),
(2, 'Homer', 'Simpson'),
(3, 'Ned', 'Flanders')
) AS Idiots(IdiotId, FirstName, LastName)
WHERE IdiotId = 2; Resultat:
+-------------+------------+| Fornavn | Efternavn ||-------------+------------|| Homer | Simpson |+-------------+------------+
Afledte tabeller kan bruges til at overvinde grænsen på 1000 rækker, når du indsætter værdier i en database.
Bruges i en MERGE Erklæring
Her er et eksempel på VALUES bliver brugt i en MERGE erklæring:
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; Resultat:
+----------+---------+| Skift | Tæl ||---------+---------|| INDSÆT | 2 || OPDATERING | 1 |+----------+---------+
I dette tilfælde blev en række opdateret, og to nye rækker blev indsat, baseret på værdierne angivet i VALUES klausul.
Her er den resulterende tabel nu:
SELECT * FROM Idiots; Resultat:
+-------+-------------------+| IdiotId | Fornavn | Efternavn ||-----------+-------------+--------------------|| 1 | Peter | Griffin || 2 | Homer | Simpson || 3 | Ned | Oki Dokily! || 4 | Lloyd | jul || 5 | Harry | Dunne |+-----------+-------------+---------+