No SQL Server,
VALUES é um construtor de valor de tabela que especifica um conjunto de expressões de valor de linha a serem construídas em uma tabela. Os
VALUES cláusula é frequentemente usada com INSERT instruções para inserir dados, mas também pode ser usado como uma tabela derivada no USING cláusula do MERGE instrução ou o FROM cláusula. Sintaxe
VALUES ( <row value expression list> ) [ ,...n ]
<row value expression list> ::=
{<row value expression> } [ ,...n ]
<row value expression> ::=
{ DEFAULT | NULL | expression } Observe que
DEFAULT é permitido apenas em um INSERT demonstração. DEFAULT força o SQL Server a inserir o valor padrão definido para a coluna. Se um padrão não existir para a coluna e a coluna permitir valores nulos, NULL está inserido. DEFAULT não pode ser usado em colunas de identidade. Exemplos
Aqui estão alguns exemplos que demonstram como
VALUES pode ser usado no SQL Server. Usado em um INSERT Declaração
Aqui está um exemplo de uso de
VALUES cláusula como parte de um INSERT demonstração: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'); Isso criou uma tabela chamada
Idiots e inseriu três linhas nele. Agora podemos usar um
SELECT instrução para ver os novos valores na tabela:SELECT * FROM Idiots; Resultado:
+-----------+-------------+------------+ | IdiotId | FirstName | LastName | |-----------+-------------+------------| | 1 | Peter | Griffin | | 2 | Homer | Simpson | | 3 | Ned | Flanders | +-----------+-------------+------------+
Quando os
VALUES cláusula é usada em um INSERT instrução, há um limite de 1.000 linhas. Uma maneira de superar isso é usar VALUES em um SELECT instrução para criar uma tabela derivada. Isso evita que tenhamos que usar vários INSERT instruções ou fazendo uma inserção em massa. Usado em um SELECT Declaração
Podemos usar
VALUES para criar uma tabela derivada no FROM cláusula. Aqui está um SELECT declaração para demonstrar:SELECT
FirstName,
LastName
FROM
(VALUES
(1, 'Peter', 'Griffin'),
(2, 'Homer', 'Simpson'),
(3, 'Ned', 'Flanders')
) AS Idiots(IdiotId, FirstName, LastName)
WHERE IdiotId = 2; Resultado:
+-------------+------------+ | FirstName | LastName | |-------------+------------| | Homer | Simpson | +-------------+------------+
As tabelas derivadas podem ser usadas para superar o limite de 1.000 linhas ao inserir valores em um banco de dados.
Usado em um MERGE Declaração
Aqui está um exemplo de
VALUES sendo usado em um MERGE demonstração: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; Resultado:
+----------+---------+ | Change | Count | |----------+---------| | INSERT | 2 | | UPDATE | 1 | +----------+---------+
Nesse caso, uma linha foi atualizada e duas novas linhas foram inseridas, com base nos valores fornecidos no
VALUES cláusula. Aqui está a tabela resultante agora:
SELECT * FROM Idiots; Resultado:
+-----------+-------------+---------------+ | IdiotId | FirstName | LastName | |-----------+-------------+---------------| | 1 | Peter | Griffin | | 2 | Homer | Simpson | | 3 | Ned | Okily Dokily! | | 4 | Lloyd | Christmas | | 5 | Harry | Dunne | +-----------+-------------+---------------+