Expressões (Transact-SQL)
Aplica-se a: SQL Server
Banco de Dados
SQL do Azure Instância Gerenciada de SQL do
Azure Azure Synapse Analytics
PDW (Analytics Platform System)
Ponto de extremidade de análise de SQL no Microsoft Fabric
Warehouse no Microsoft Fabric
É uma combinação de símbolos e operadores que o Mecanismo de Banco de Dados do SQL Server avalia para obter um único valor de dados. Expressões simples podem ser uma única constante, variável, coluna ou função escalar. Os operadores podem ser usados para unir duas ou mais expressões simples em uma expressão complexa.
Convenções de sintaxe de Transact-SQL
Sintaxe
-- Syntax for SQL Server and Azure SQL Database
{ constant | scalar_function | [ table_name. ] column | variable
| ( expression ) | ( scalar_subquery )
| { unary_operator } expression
| expression { binary_operator } expression
| ranking_windowed_function | aggregate_windowed_function
}
-- Syntax for Azure Synapse Analytics and Parallel Data Warehouse
-- Expression in a SELECT statement
<expression> ::=
{
constant
| scalar_function
| column
| variable
| ( expression )
| { unary_operator } expression
| expression { binary_operator } expression
}
[ COLLATE Windows_collation_name ]
-- Scalar Expression in a DECLARE, SET, IF...ELSE, or WHILE statement
<scalar_expression> ::=
{
constant
| scalar_function
| variable
| ( expression )
| (scalar_subquery )
| { unary_operator } expression
| expression { binary_operator } expression
}
[ COLLATE { Windows_collation_name ]
Observação
Para exibir a sintaxe do Transact-SQL para o SQL Server 2014 (12.x) e versões anteriores, confira a Documentação das versões anteriores.
Argumentos
Termo | Definição |
---|---|
constant | É um símbolo que representa um valor de dados único e específico. Para obter mais informações, confira Constantes (Transact-SQL). |
scalar_function | É uma unidade de sintaxe de Transact-SQL que fornece um serviço específico e retorna um único valor. scalar_function podem ser funções escalares internas, como as funções SUM, GETDATE ou CAST ou funções escalares definidas pelo usuário. |
[ table_name. ] | É o nome ou alias de uma tabela. |
column | É o nome de uma coluna. Somente o nome da coluna é permitido em uma expressão. |
variable | É o nome de uma variável ou parâmetro. Para obter mais informações, consulte DECLARE @local_variable (Transact-SQL). |
( expression ) | É qualquer expressão válida conforme definido neste tópico. Os parênteses são operadores de agrupamento que verificam se todos os operadores na expressão entre parênteses são avaliados antes de a expressão resultante ser combinada com outra. |
( scalar_subquery ) | É uma subconsulta que retorna um valor. Por exemplo:SELECT MAX(UnitPrice) FROM Products |
{ unary_operator } | Os operadores unários podem ser aplicados somente a expressões que avaliam qualquer um dos tipos de dados da categoria de tipo de dados numérico. É um operador que tem somente um operando numérico: + indica um número positivo. - indica um número negativo. ~ indica o operador de complemento. |
{ binary_operator } | É um operador que define a maneira como duas expressões são combinadas para produzir um único resultado. binary_operator pode ser um operador aritmético, o operador de atribuição (=), um operador bit a bit, um operador de comparação, um operador lógico, o operador de concatenação de cadeia de caracteres (+) ou um operador unário. Para obter mais informações sobre operadores, confira Operadores (Transact-SQL). |
ranking_windowed_function | É qualquer função de classificação Transact-SQL. Para obter mais informações, confira Funções de classificação (Transact-SQL). |
aggregate_windowed_function | É qualquer função de agregação Transact-SQL com a cláusula OVER. Para obter mais informações, confira Cláusula OVER (Transact-SQL). |
Resultados da expressão
Em uma expressão simples composta de uma única constante, variável, função escalar ou nome de coluna: o tipo de dados, ordenação, precisão, escala e valor da expressão é o tipo de dados, ordenação, precisão, escala e valor do elemento referenciado.
Quando duas expressões são combinadas usando operadores lógicos ou de comparação, o tipo de dados resultante é booliano e o valor é um dos seguintes: TRUE, FALSE ou UNKNOWN. Para obter mais informações sobre tipos de dados boolianos, confira Operadores de comparação (Transact-SQL).
Quando duas expressões são combinadas usando operadores aritméticos, bit a bit ou de cadeia de caracteres, o operador determina o tipo de dados resultante.
Expressões complexas compostas de muitos símbolos e operadores são avaliadas como um único resultado avaliado. O tipo de dados, a ordenação, a precisão, a escala e o valor da expressão resultante são determinados pela combinação das expressões de componentes, duas de cada vez, até o resultado final ser alcançado. A sequência na qual as expressões são combinadas é definida pela precedência dos operadores na expressão.
Comentários
Duas expressões podem ser combinadas por um operador se o operador oferecer suporte para os tipos de dados das duas e pelo menos uma destas condições for verdadeira:
As expressões têm o mesmo tipo de dados.
O tipo de dados com a menor precedência pode ser implicitamente convertido em tipo de dados com a maior precedência de tipo de dados.
Se as expressões não atenderem a essas condições, as funções CAST ou CONVERT poderão ser usadas para converter explicitamente o tipo de dados de menor precedência em qualquer tipo de dados de maior precedência ou em um tipo de dados intermediário que possa ser implicitamente convertido no tipo de dados com a maior precedência.
Se não houver nenhuma conversão implícita ou explícita com suporte, as duas expressões não poderão ser combinadas.
A ordenação de qualquer expressão avaliada como uma cadeia de caracteres é definida seguindo as regras de precedência de ordenação. Para obter mais informações, consulte Precedência de ordenação (Transact-SQL).
Em uma linguagem de programação como C ou Microsoft Visual Basic, uma expressão sempre é avaliada como um só resultado. As expressões em uma lista de seleção Transact-SQL seguem uma variação nessa regra: a expressão é avaliada individualmente para cada linha no conjunto de resultados. Uma única expressão pode ter um valor diferente em cada linha do conjunto de resultados, mas cada linha tem apenas um valor para a expressão. Por exemplo, na seguinte instrução SELECT
, as referências a ProductID
e ao termo 1+2
na lista de seleção são expressões:
USE AdventureWorks2022;
GO
SELECT ProductID, 1+2
FROM Production.Product;
GO
A expressão 1+2
é avaliada como 3
em cada linha do conjunto de resultados. Embora a expressão ProductID
gere um valor exclusivo em cada linha de conjunto de resultados, cada linha tem apenas um valor para ProductID
.
- O Azure Synapse Analytics aloca uma quantidade máxima fixa de memória para cada thread, de modo que nenhum thread possa usar toda a memória. Parte dessa memória é usada para armazenar expressões de consultas. Se uma consulta tiver muitas expressões e sua memória necessária exceder o limite interno, o mecanismo não a executará. Para evitar esse problema, os usuários podem alterar a consulta em várias consultas com um número menor de expressões em cada uma. Por exemplo, você tem uma consulta com uma longa lista de expressões na cláusula WHERE:
DELETE FROM dbo.MyTable
WHERE
(c1 = '0000001' AND c2 = 'A000001') or
(c1 = '0000002' AND c2 = 'A000002') or
(c1 = '0000003' AND c2 = 'A000003')
/* ... additional, similar expressions omitted for simplicity */
Altere esta consulta para:
DELETE FROM dbo.MyTable WHERE (c1 = '0000001' AND c2 = 'A000001');
DELETE FROM dbo.MyTable WHERE (c1 = '0000002' AND c2 = 'A000002');
DELETE FROM dbo.MyTable WHERE (c1 = '0000003' AND c2 = 'A000003');
/* ... refactored, individual DELETE statements omitted for simplicity */
Consulte Também
AT TIME ZONE (Transact-SQL)
CASE (Transact-SQL)
CAST e CONVERT (Transact-SQL)
COALESCE (Transact-SQL)
Conversão de tipo de dados (Mecanismo de Banco de Dados)
Precedência de tipo de dados (Transact-SQL)
Tipos de dados (Transact-SQL)
Funções internas (Transact-SQL)
LIKE (Transact-SQL)
NULLIF (Transact-SQL)
SELECT (Transact-SQL)
WHERE (Transact-SQL)