Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Mệnh đề VALUES trong SQL Server

Trong SQL Server, VALUES là một phương thức tạo giá trị bảng chỉ định một tập hợp các biểu thức giá trị hàng được xây dựng thành một bảng.

VALUES mệnh đề thường được sử dụng với INSERT để chèn dữ liệu, nhưng nó cũng có thể được sử dụng như một bảng dẫn xuất trong USING mệnh đề của MERGE hoặc câu lệnh FROM mệnh đề.

Cú pháp

VALUES ( <row value expression list> ) [ ,...n ]   
  
<row value expression list> ::=  
    {<row value expression> } [ ,...n ]  
  
<row value expression> ::=  
    { DEFAULT | NULL | expression }

Lưu ý rằng DEFAULT chỉ được phép trong INSERT tuyên bố. DEFAULT buộc SQL Server phải chèn giá trị mặc định được xác định cho cột. Nếu không tồn tại mặc định cho cột và cột cho phép giá trị rỗng, NULL được chèn vào. DEFAULT không thể được sử dụng trên các cột nhận dạng.

Ví dụ

Dưới đây là một số ví dụ chứng minh cách VALUES có thể được sử dụng trong SQL Server.

Được sử dụng trong INSERT Tuyên bố

Dưới đây là một ví dụ về việc sử dụng VALUES mệnh đề như một phần của INSERT tuyên bố:

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');

Điều đó đã tạo ra một bảng có tên là Idiots và chèn ba hàng vào đó.

Bây giờ chúng ta có thể sử dụng SELECT để xem các giá trị mới trong bảng:

SELECT * FROM Idiots;

Kết quả:

+-----------+-------------+------------+
| IdiotId   | FirstName   | LastName   |
|-----------+-------------+------------|
| 1         | Peter       | Griffin    |
| 2         | Homer       | Simpson    |
| 3         | Ned         | Flanders   |
+-----------+-------------+------------+

Khi VALUES mệnh đề được sử dụng trong INSERT , có giới hạn 1000 hàng. Một cách để khắc phục điều này là sử dụng VALUES trong một SELECT câu lệnh để tạo một bảng dẫn xuất. Điều đó giúp chúng tôi không phải sử dụng nhiều INSERT hoặc thực hiện chèn hàng loạt.

Được sử dụng trong SELECT Tuyên bố

Chúng ta có thể sử dụng VALUES để tạo một bảng dẫn xuất trong FROM mệnh đề. Đây là SELECT tuyên bố để chứng minh:

SELECT
   FirstName,
   LastName
FROM
   (VALUES 
        (1, 'Peter', 'Griffin'),
        (2, 'Homer', 'Simpson'),
        (3, 'Ned', 'Flanders')
   ) AS Idiots(IdiotId, FirstName, LastName)
WHERE IdiotId = 2;

Kết quả:

+-------------+------------+
| FirstName   | LastName   |
|-------------+------------|
| Homer       | Simpson    |
+-------------+------------+

Bảng gốc có thể được sử dụng để vượt qua giới hạn 1000 hàng khi chèn giá trị vào cơ sở dữ liệu.

Được sử dụng trong MERGE Tuyên bố

Đây là một ví dụ về VALUES được sử dụng trong MERGE tuyên bố:

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;

Kết quả:

+----------+---------+
| Change   | Count   |
|----------+---------|
| INSERT   | 2       |
| UPDATE   | 1       |
+----------+---------+

Trong trường hợp này, một hàng đã được cập nhật và hai hàng mới được chèn vào, dựa trên các giá trị được cung cấp trong VALUES mệnh đề.

Đây là bảng kết quả bây giờ:

SELECT * FROM Idiots;

Kết quả:

+-----------+-------------+---------------+
| 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. Chuyển đổi ‘time’ thành ‘smalldatetime’ trong SQL Server (Ví dụ T-SQL)

  2. Cách tìm vị trí tệp mặc định cho tệp dữ liệu và tệp nhật ký trong SQL Server

  3. Cách hàm CHAR () hoạt động trong SQL Server (T-SQL)

  4. Các hàm TRIM, LTRIM và RTRIM của SQL Server

  5. Kiểm tra xem một hàng có tồn tại hay không, nếu không, hãy chèn