Expresiones (Transact-SQL)

Se aplica a: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW) Punto de conexión de análisis SQL en Microsoft Fabric Almacenamiento en Microsoft Fabric

Combinación de símbolos y operadores que sql Server Motor de base de datos 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

Sintaxis para SQL Server y 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
}

Sintaxis para Azure Synapse Analytics y Almacenamiento de datos paralelos.

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

Argumentos

constant

Símbolo que representa un único valor de datos específico. Para obtener más información, vea Constants (Constantes).

scalar_function

Unidad de sintaxis de Transact-SQL que proporciona un servicio específico y devuelve un valor único. scalar_function pueden ser funciones escalares integradas, como las funciones , GETDATE()o CAST o las funciones escalares definidas por el SUMusuario.

table_name

Nombre o alias de una tabla.

column

El nombre de una columna. En una expresión solo se admite el nombre de la columna.

variable

Nombre de una variable o parámetro. Para obtener más información, vea DECLARE @local_variable.

expression

Cualquier expresión válida tal como se define en este artículo. 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

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 un número positivo
  • - indica un número negativo
  • ~ indica el operador de complemento del uno

binary_operator

Operador que define la forma en que se combinan 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 cadenas (+) o un operador unario. Para obtener más información sobre los operadores, vea Operadores.

ranking_windowed_function

Cualquier función de clasificación de Transact-SQL. Para obtener más información, vea Funciones de clasificación.

aggregate_windowed_function

Cualquier función de agregado de Transact-SQL con la cláusula OVER. Para obtener más información, vea CLÁUSULA SELECT - OVER.

Resultados de expresiones

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.

Cuando se combinan dos expresiones mediante operadores lógicos o de comparación, el tipo de datos resultante es Boolean y el valor es: TRUE, FALSEo UNKNOWN. Para obtener más información sobre los tipos de datos booleanos, vea Operadores de comparación.

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

Un operador puede combinar dos expresiones si ambos 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 CAST funciones o CONVERT . Use CAST o CONVERT para convertir explícitamente el tipo de datos con la prioridad inferior al tipo de datos con mayor prioridad o a un tipo de datos intermedio que se pueda convertir implícitamente al tipo de datos con mayor prioridad.

Si no hay ninguna 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.

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 expresión única puede tener un valor diferente en cada fila del conjunto de resultados, pero cada fila solo tiene un 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 lo ejecuta. 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  */