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
Base de Dados SQL do Azure
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, 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 atribui um valor.
=
|
+=
|
-=
|
*=
|
/=
|
%=
|
&=
|
^=
|
|={ }
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 |
| &= | bit a AND bit e assign |
| ^= | bit a XOR bit e assign |
| |= | bit a OR bit e assign |
expression
Qualquer expressão válida. Este termo inclui uma subconsulta escalar.
Remarks
Use SELECT @local_variable para devolver um único valor à variável. No entanto , quando expression é o nome de uma coluna, ela pode retornar vários valores. Se a SELECT instrução devolver mais do que um valor, a variável recebe o último valor que a consulta devolve.
Se a SELECT instrução não devolver linhas, a variável mantém o seu valor atual. Se a expressão for uma subconsulta escalar que não retorna valor, a variável é definida para NULL.
Uma SELECT instrução pode inicializar múltiplas variáveis locais.
Note
Não pode usar uma SELECT instrução que contenha uma atribuição de variável para também realizar operações típicas de recuperação de conjuntos de resultados.
Examples
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.
O AdventureWorksLT banco de dados é usado como o banco de dados de exemplo para o Banco de Dados SQL do Azure.
A. Use SELECT @local_variable para retornar um único valor
No exemplo seguinte, a variável @var1 obtém o valor 'Generic Name'. 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".
DECLARE @var1 AS VARCHAR (30);
SELECT @var1 = 'Generic Name';
SELECT @var1 = [Name]
FROM SalesLT.Product
WHERE ProductID = 1000000;
SELECT @var1 AS 'ProductName';
Aqui está o conjunto de resultados.
ProductName
------------------------------
Generic Name
B. Use SELECT @local_variable para retornar null
No exemplo seguinte, uma subconsulta atribui 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.
DECLARE @var1 AS VARCHAR (30);
SELECT @var1 = 'Generic Name';
SELECT @var1 = (SELECT [Name]
FROM SalesLT.Product
WHERE ProductID = 1000000);
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 isso seja atualizado linha a linha. Por exemplo, @Var pode ser definido como valor inicial de @Var para todas as linhas. Este comportamento ocorre porque a ordem e frequência com que as atribuições são processadas não é determinante. Esta regra aplica-se a expressões que contêm concatenação de cadeias de variáveis, como demonstrado no exemplo seguinte, mas também a expressões com variáveis não de cadeia 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 a concatenação de cadeias, considere a função STRING_AGG, introduzida em SQL Server 2017 (14.x), para cenários em que se deseja a concatenação ordenada das cadeias. Para mais informações, consulte STRING_AGG.
O exemplo seguinte mostra um antipadrão a evitar. Usar ORDER BY numa 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;
Aqui está o 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;
Aqui está o 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