Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

VALUES Clause di SQL Server

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         |
+-----------+-------------+---------------+

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Periksa/Ubah Tingkat Kompatibilitas Database di SQL Server (SSMS)

  2. VMware CPU Hot Plug vNUMA Effects pada SQL Server

  3. Hitung(*) vs Hitung(1) - SQL Server

  4. Apa yang dilakukan kueri ini untuk membuat daftar SQL Server yang dibatasi koma?

  5. @@ROWCOUNT – Dapatkan Jumlah Baris yang Dipengaruhi oleh Pernyataan Terakhir di SQL Server