Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Endpoint de análise SQL no Microsoft Fabric
Armazém no Microsoft Fabric
Base de dados SQL no Microsoft Fabric
Define uma variável local como o valor de uma expressão.
Para atribuir variáveis, recomendamos que você use SET @local_variable em vez de SELECT @local_variable.
Transact-SQL convenções de sintaxe
Syntax
SELECT { @local_variable { = | += | -= | *= | /= | %= | &= | ^= | |= } expression }
[ ,...n ] [ ; ]
Arguments
@ local_variable
Uma variável declarada para a qual um valor deve ser atribuído.
=
|
+=
|
-=
|
*=
|
/=
|
%=
|
&=
|
^=
|
|={ }
Atribua o valor à direita à variável à esquerda.
Operador de atribuição composta:
| Operator | Action |
|---|---|
| = | Atribui a expressão que se segue à variável. |
| += | Adicionar e atribuir |
| -= | Subtrair e atribuir |
| *= | Multiplicar e atribuir |
| /= | Dividir e atribuir |
| %= | Modulo e atribuir |
| &= | Bitwise E e atribuir |
| ^= | XOR bit a bit e atribuir |
| |= | Bitwise OU e atribuir |
expression
Qualquer expressão válida. Isso inclui uma subconsulta escalar.
Remarks
SELECT @local_variable normalmente é usado para retornar um único valor para a variável. No entanto , quando expression é o nome de uma coluna, ela pode retornar vários valores. Se a instrução SELECT retornar mais de um valor, a variável receberá o último valor retornado.
Se a instrução SELECT não retornar linhas, a variável manterá seu valor presente. Se expression for uma subconsulta escalar que não retorna nenhum valor, a variável será definida como NULL.
Uma instrução SELECT pode inicializar várias variáveis locais.
Note
Uma instrução SELECT que contém uma atribuição variável não pode ser usada para também executar operações típicas de recuperação de conjunto de resultados.
Examples
A. Use SELECT @local_variable para retornar um único valor
No exemplo a seguir, a variável @var1 é atribuída "Generic Name" como seu valor. A consulta na Store tabela não retorna linhas porque o valor especificado para CustomerID não existe na tabela. A variável mantém o valor "Nome genérico".
Este exemplo usa o AdventureWorksLT banco de dados de exemplo, para obter mais informações, consulte Bancos de dados de exemplo AdventureWorks. O AdventureWorksLT banco de dados é usado como o banco de dados de exemplo para o Banco de Dados SQL do Azure.
-- Uses AdventureWorks2022LT
DECLARE @var1 VARCHAR(30);
SELECT @var1 = 'Generic Name';
SELECT @var1 = [Name]
FROM SalesLT.Product
WHERE ProductID = 1000000; --Value does not exist
SELECT @var1 AS 'ProductName';
Aqui está o conjunto de resultados.
ProductName
------------------------------
Generic Name
B. Use SELECT @local_variable para retornar null
No exemplo a seguir, uma subconsulta é usada para atribuir um valor a @var1. Como o valor solicitado para CustomerID não existe, a subconsulta não retorna nenhum valor e a variável é definida como NULL.
Este exemplo usa o AdventureWorksLT banco de dados de exemplo, para obter mais informações, consulte Bancos de dados de exemplo AdventureWorks. O AdventureWorksLT banco de dados é usado como o banco de dados de exemplo para o Banco de Dados SQL do Azure.
-- Uses AdventureWorksLT
DECLARE @var1 VARCHAR(30);
SELECT @var1 = 'Generic Name';
SELECT @var1 = (SELECT [Name]
FROM SalesLT.Product
WHERE ProductID = 1000000); --Value does not exist
SELECT @var1 AS 'Company Name';
Aqui está o conjunto de resultados.
Company Name
----------------------------
NULL
C. Uso antipadrão de atribuição de variável recursiva
Evite o seguinte padrão para o uso recursivo de variáveis e expressões:
SELECT @Var = <expression containing @Var>
FROM
...
Neste caso, não é garantido que @Var seria atualizado linha a linha. Por exemplo, @Var pode ser definido como valor inicial de @Var para todas as linhas. Isso ocorre porque a ordem e a frequência em que as atribuições são processadas não são determinantes. Isso se aplica a expressões que contêm concatenação de cadeia de variáveis, como demonstrado abaixo, mas também a expressões com variáveis que não sejam de cadeia de caracteres ou operadores de estilo +=. Use funções de agregação em vez disso para uma operação baseada em conjunto em vez de uma operação linha por linha.
Para concatenação de cadeia de caracteres, considere a função, introduzida no SQL Server 2017 (14.x), para cenários em que a STRING_AGG concatenação ordenada de cadeia de caracteres é desejada. Para obter mais informações, consulte STRING_AGG (Transact-SQL).
Os exemplos de código neste artigo usam o banco de dados de exemplo AdventureWorks2025 ou AdventureWorksDW2025, que pode ser descarregado da página inicial de Exemplos e Projetos da Comunidade do Microsoft SQL Server.
Um exemplo a evitar, em que o uso de ORDER BY na tentativa de ordenar a concatenação faz com que a lista fique incompleta:
DECLARE @List AS nvarchar(max);
SELECT @List = CONCAT(COALESCE(@List + ', ',''), p.LastName)
FROM Person.Person AS p
WHERE p.FirstName = 'William'
ORDER BY p.BusinessEntityID;
SELECT @List;
Conjunto de resultados:
(No column name)
---
Walker
Em vez disso, considere:
DECLARE @List AS nvarchar(max);
SELECT @List = STRING_AGG(p.LastName,', ') WITHIN GROUP (ORDER BY p.BusinessEntityID)
FROM Person.Person AS p
WHERE p.FirstName = 'William';
SELECT @List;
Conjunto de resultados:
(No column name)
---
Vong, Conner, Hapke, Monroe, Richter, Sotelo, Vong, Ngoh, White, Harris, Martin, Thompson, Martinez, Robinson, Clark, Rodriguez, Smith, Johnson, Williams, Jones, Brown, Davis, Miller, Moore, Taylor, Anderson, Thomas, Lewis, Lee, Walker
Consulte também
- DECLARE @local_variable (Transact-SQL)
- Expressões (Transact-SQL)
- Operadores compostos (Transact-SQL)
- SELECIONAR (Transact-SQL)