Di SQL Server, VALUES
adalah konstruktor nilai tabel yang menetapkan sekumpulan ekspresi nilai baris yang akan dibuat menjadi tabel.
VALUES
klausa sering digunakan dengan INSERT
pernyataan untuk menyisipkan data, tetapi juga dapat digunakan sebagai tabel turunan baik di USING
klausa dari MERGE
pernyataan atau FROM
klausa.
Sintaks
VALUES ( <row value expression list> ) [ ,...n ]
<row value expression list> ::=
{<row value expression> } [ ,...n ]
<row value expression> ::=
{ DEFAULT | NULL | expression }
Perhatikan bahwa DEFAULT
hanya diperbolehkan dalam INSERT
penyataan. DEFAULT
memaksa SQL Server untuk memasukkan nilai default yang ditentukan untuk kolom. Jika default tidak ada untuk kolom dan kolom mengizinkan nilai null, NULL
dimasukkan. DEFAULT
tidak dapat digunakan pada kolom identitas.
Contoh
Berikut adalah beberapa contoh yang menunjukkan bagaimana VALUES
dapat digunakan di SQL Server.
Digunakan dalam INSERT
Pernyataan
Berikut ini contoh penggunaan VALUES
klausa sebagai bagian dari INSERT
pernyataan:
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');
Itu membuat tabel bernama Idiots
dan memasukkan tiga baris ke dalamnya.
Sekarang kita dapat menggunakan SELECT
pernyataan untuk melihat nilai baru dalam tabel:
SELECT * FROM Idiots;
Hasil:
+-----------+-------------+------------+ | IdiotId | FirstName | LastName | |-----------+-------------+------------| | 1 | Peter | Griffin | | 2 | Homer | Simpson | | 3 | Ned | Flanders | +-----------+-------------+------------+
Saat VALUES
klausa digunakan dalam INSERT
pernyataan, ada batas 1000 baris. Salah satu cara untuk mengatasinya adalah dengan menggunakan VALUES
dalam SELECT
pernyataan untuk membuat tabel turunan. Itu menyelamatkan kita dari keharusan menggunakan beberapa INSERT
pernyataan atau melakukan penyisipan massal.
Digunakan dalam SELECT
Pernyataan
Kita dapat menggunakan VALUES
untuk membuat tabel turunan di FROM
ayat. Berikut adalah SELECT
pernyataan untuk didemonstrasikan:
SELECT
FirstName,
LastName
FROM
(VALUES
(1, 'Peter', 'Griffin'),
(2, 'Homer', 'Simpson'),
(3, 'Ned', 'Flanders')
) AS Idiots(IdiotId, FirstName, LastName)
WHERE IdiotId = 2;
Hasil:
+-------------+------------+ | FirstName | LastName | |-------------+------------| | Homer | Simpson | +-------------+------------+
Tabel turunan dapat digunakan untuk mengatasi batas 1000 baris saat memasukkan nilai ke dalam database.
Digunakan dalam MERGE
Pernyataan
Berikut ini contoh VALUES
sedang digunakan dalam MERGE
pernyataan:
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;
Hasil:
+----------+---------+ | Change | Count | |----------+---------| | INSERT | 2 | | UPDATE | 1 | +----------+---------+
Dalam hal ini, satu baris diperbarui dan dua baris baru dimasukkan, berdasarkan nilai yang diberikan di VALUES
klausa.
Berikut tabel yang dihasilkan sekarang:
SELECT * FROM Idiots;
Hasil:
+-----------+-------------+---------------+ | IdiotId | FirstName | LastName | |-----------+-------------+---------------| | 1 | Peter | Griffin | | 2 | Homer | Simpson | | 3 | Ned | Okily Dokily! | | 4 | Lloyd | Christmas | | 5 | Harry | Dunne | +-----------+-------------+---------------+