Expresiones (Transact-SQL)

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Punto de conexión de análisis SQL en Microsoft FabricAlmacenamiento en Microsoft Fabric

Se trata de una combinación de símbolos y operadores que Motor de base de datos de SQL Server evalúa para obtener un único valor de datos. Las expresiones simples pueden ser una sola constante, variable, columna o función escalar. Los operadores se pueden usar para combinar dos o más expresiones simples y formar una expresión compleja.

Convenciones de sintaxis de Transact-SQL

Sintaxis

-- 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 ]  
  

Nota:

Para ver la sintaxis de Transact-SQL para SQL Server 2014 (12.x) y versiones anteriores, consulte Versiones anteriores de la documentación.

Argumentos

Término Definición
constant Es un símbolo que representa un único valor de datos específico. Para más información, vea Constantes (Transact-SQL&).
scalar_function Es una unidad de sintaxis Transact-SQL que proporciona un servicio específico y devuelve un valor único. scalar_function puede incluir funciones escalares integradas, como las funciones SUM, GETDATE o CAST, o funciones escalares definidas por el usuario.
[ table_name. ] Es el nombre o alias de una tabla.
column Es el nombre de una columna. En una expresión solo se admite el nombre de la columna.
variable Es el nombre de una variable o un parámetro. Para obtener más información, vea DECLARE @local_variable (Transact-SQL).
(expression) Es cualquier expresión válida tal como se define en este tema. Los paréntesis son operadores de agrupación que garantizan que todos los operadores de la expresión escritos entre paréntesis se evalúen antes de que la expresión resultante se combine con otra.
(scalar_subquery) Es una subconsulta que devuelve un valor. Por ejemplo:

SELECT MAX(UnitPrice)

FROM Products
{ unary_operator } Los operadores unarios solo se pueden aplicar a las expresiones que se evalúen como un tipo de datos numérico. Es un operador que solo tiene un operando numérico:

+ indica que es un número positivo.

- indica que es un número negativo.

~ indica el operador complementario.
{ binary_operator } Es un operador que define la forma en que deben combinarse dos expresiones para producir un único resultado. binary_operator puede ser un operador aritmético, el operador de asignación (=), un operador bit a bit, un operador de comparación, un operador lógico, el operador de concatenación de cadena (+) o un operador unario. Para obtener más información sobre operadores, vea Operadores (Transact-SQL).
ranking_windowed_function Es cualquier función de categoría de Transact-SQL. Para obtener más información, vea Funciones de categoría (Transact-SQL).
aggregate_windowed_function Es cualquier función de agregado de Transact-SQL con la cláusula OVER. Para más información, vea Cláusula OVER (Transact-SQL).

Resultados de la expresión

Para una expresión sencilla creada con una constante, variable, función escalar o nombre de columna, el tipo de datos, intercalación, precisión, escala y valor de la expresión es el tipo de datos, intercalación, precisión, escala y valor del elemento de referencia.

Si se combinan dos expresiones mediante operadores de comparación o lógicos, el tipo de datos resultante es booleano y el valor es uno de los siguientes: TRUE, FALSE o UNKNOWN. Para obtener más información sobre los tipos de datos booleanos, vea Operadores de comparación (Transact-SQL).

Cuando dos expresiones se combinan mediante operadores aritméticos, bit a bit o de cadena, el operador determina el tipo de datos resultante.

Las expresiones complejas formadas por varios símbolos y operadores se evalúan como un resultado formado por un solo valor. El tipo de datos, intercalación, precisión y valor de la expresión resultante se determina al combinar las expresiones componentes de dos en dos, hasta que se alcanza un resultado final. La prioridad de los operadores de la expresión define la secuencia en que se combinan las expresiones.

Comentarios

Dos expresiones pueden combinarse mediante un operador si ambas tienen tipos de datos admitidos por el operador y se cumple al menos una de estas condiciones:

  • Las expresiones tienen el mismo tipo de datos.

  • El tipo de datos de menor prioridad se puede convertir implícitamente al tipo de datos de mayor prioridad.

Si las expresiones no cumplen estas condiciones, se pueden usar las funciones CAST o CONVERT para convertir explícitamente el tipo de datos de menor prioridad al tipo de datos de mayor prioridad o a un tipo de datos intermedio que se puede convertir implícitamente al tipo de datos de mayor prioridad.

Si no se admite la conversión implícita o explícita admitida, las dos expresiones no se pueden combinar.

La intercalación de cualquier expresión que se evalúa como una cadena de caracteres se establece según las reglas de prioridad de intercalación. Para obtener más información, vea Prioridad de intercalación (Transact-SQL).

En un lenguaje de programación como C o Microsoft Visual Basic, una expresión siempre se evalúa como un resultado único. Las expresiones de una lista de selección de Transact-SQL constituyen una variación de esta regla: la expresión se evalúa individualmente para cada fila del conjunto de resultados. Una única expresión puede tener un valor distinto en cada fila del conjunto de resultados, pero cada fila tiene un único valor para la expresión. Por ejemplo, en esta instrucción SELECT, tanto la referencia a ProductID como el término 1+2 de la lista seleccionada son expresiones:

USE AdventureWorks2022;  
GO  
SELECT ProductID, 1+2  
FROM Production.Product;  
GO  

La expresión 1+2 se evalúa como 3 en cada fila del conjunto de resultados. Aunque la expresión ProductID genera un valor único en cada fila del conjunto de resultados, cada fila tiene solo un valor para ProductID.

  • Azure Synapse Analytics asigna una cantidad de memoria máxima fija a cada subproceso, para que ningún subproceso pueda usar toda la memoria. Parte de esta memoria se usa para almacenar las expresiones de las consultas. Si una consulta tiene demasiadas expresiones y su memoria necesaria supera el límite interno, el motor no la ejecutará. Para evitar este problema, los usuarios pueden cambiar la consulta en varias consultas con un número menor de expresiones en cada una. Por ejemplo, tiene una consulta con una larga lista de expresiones en la 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 */

Cambie esta consulta por:

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  */

Vea también

AT TIME ZONE (Transact-SQL)
CASE (Transact-SQL)
CAST y CONVERT (Transact-SQL)
COALESCE (Transact-SQL)
Conversión de tipos de datos (Motor de base de datos)
Prioridad de tipo de datos (Transact-SQL)
Tipos de datos (Transact-SQL)
Funciones integradas (Transact-SQL)
LIKE (Transact-SQL)
NULLIF (Transact-SQL)
SELECT (Transact-SQL)
WHERE (Transact-SQL)