Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Клауза VALUES в SQL Server

В SQL Server, VALUES е конструктор на стойност на таблицата, който определя набор от изрази за стойности на редове, които да бъдат конструирани в таблица.

VALUES клаузата често се използва с INSERT изрази за вмъкване на данни, но може да се използва и като производна таблица в USING клауза на MERGE оператор или FROM клауза.

Синтаксис

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

Обърнете внимание, че DEFAULT е разрешено само в INSERT изявление. DEFAULT принуждава SQL Server да вмъкне стойността по подразбиране, дефинирана за колоната. Ако за колоната не съществува по подразбиране и колоната позволява нулеви стойности, NULL се вмъква. DEFAULT не може да се използва за колони за идентичност.

Примери

Ето няколко примера, които демонстрират как VALUES може да се използва в SQL Server.

Използва се в INSERT Изявление

Ето пример за използване на VALUES клауза като част от INSERT изявление:

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

Това създаде таблица, наречена Idiots и вмъкнах три реда в него.

Вече можем да използваме SELECT оператор, за да видите новите стойности в таблицата:

SELECT * FROM Idiots;

Резултат:

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

Когато VALUES клаузата се използва в INSERT изявление, има ограничение от 1000 реда. Един от начините да преодолеете това е да използвате VALUES в SELECT оператор за създаване на производна таблица. Това ни спестява от необходимостта да използваме множество INSERT изявления или извършване на групово вмъкване.

Използва се в SELECT Изявление

Можем да използваме VALUES за да създадете производна таблица в FROM клауза. Ето SELECT изявление за демонстриране:

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

Резултат:

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

Извлечените таблици могат да се използват за преодоляване на ограничението от 1000 реда при вмъкване на стойности в база данни.

Използва се в MERGE Изявление

Ето пример за VALUES се използва в MERGE изявление:

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;

Резултат:

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

В този случай един ред беше актуализиран и бяха вмъкнати два нови реда въз основа на стойностите, предоставени в VALUES клауза.

Ето резултатната таблица сега:

SELECT * FROM Idiots;

Резултат:

+-----------+-------------+---------------+
| 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. как да декларирам глобална променлива в SQL Server ..?

  2. Отстраняване на проблеми с репликацията на SQL сървър

  3. Пример за sys.dm_sql_referenced_entities() на SQL Server, връщащ обект, който препраща към свързан сървър

  4. INSTR() Еквивалент в SQL Server

  5. Как да конвертирате от един формат за дата в друг в SQL Server с помощта на CONVERT()