Expressions (Transact-SQL)

S’applique à : SQL Server (toutes les versions prises en charge) Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

Combinaison de symboles et d'opérateurs que le Moteur de base de données SQL Server évalue pour obtenir une seule valeur. Les expressions simples peuvent être une seule constante, variable, colonne ou fonction scalaire. Les opérateurs peuvent être utilisés pour associer plusieurs expressions simples en une expression complexe.

Topic link iconConventions de la syntaxe Transact-SQL

Syntaxe

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

Notes

Pour afficher la syntaxe Transact-SQL pour SQL Server 2014 et versions antérieures, consultez Versions antérieures de la documentation.

Arguments

Terme Définition
constant Symbole représentant une valeur de données spécifique et unique. Pour plus d’informations, consultez Constantes (Transact-SQL).
scalar_function Unité de syntaxe Transact-SQL qui fournit un service spécifique et retourne une valeur unique. scalar_function peut correspondre à des fonctions scalaires intégrées, comme les fonctions SUM, GETDATE ou CAST, ou bien à des fonctions scalaires définies par l’utilisateur.
[ table_name. ] Nom ou alias d'une table.
column Nom d’une colonne. Seul le nom de la colonne est autorisé dans une expression.
variable Nom d'une variable ou d'un paramètre. Pour plus d’informations, consultez DECLARE @local_variable (Transact-SQL).
(expression) Toute expression valide définie dans cette rubrique. Les parenthèses regroupent des opérateurs et garantissent que tous les opérateurs de l'expression entre parenthèses sont traités avant que l'expression qui en résulte ne soit combinée avec une autre.
(scalar_subquery) Sous-requête qui renvoie une valeur. Par exemple :

SELECT MAX(UnitPrice)

FROM Products
{ unary_operator } Les opérateurs unaires ne s'appliquent qu'à des expressions qui évaluent un type de données de la catégorie des types de données numériques. Opérateur qui n'a qu'un seul opérande :

+ indique un nombre positif ;

- indique un nombre négatif ;

~ indique l'opérateur de complément.
{ binary_operator } Opérateur qui définit la manière de combiner deux expressions pour parvenir à un résultat unique. binary_operator peut être un opérateur arithmétique, l’opérateur d’assignation (=), un opérateur au niveau du bit, un opérateur de comparaison, un opérateur logique, l’opérateur de concaténation de chaînes (+) ou un opérateur unaire. Pour plus d’informations sur les opérateurs, consultez Opérateurs (Transact-SQL).
ranking_windowed_function Toute fonction de classement Transact-SQL. Pour plus d’informations, consultez Fonctions de classement (Transact-SQL).
aggregate_windowed_function Toute fonction d'agrégation Transact-SQL utilisée avec la clause OVER. Pour plus d’informations, consultez Clause OVER (Transact-SQL).

Résultats des expressions

Pour une expression simple composée d'une seule constante ou variable ou d'une seule fonction scalaire ou nom de colonne : les type de données, classement, précision, échelle et valeur de l'expression sont ceux de l'élément référencé.

Lorsque deux expressions sont combinées avec des opérateurs logiques ou de comparaison, il en résulte un type de données booléen ayant l'une des trois valeurs suivantes : TRUE, FALSE ou UNKNOWN. Pour plus d’informations sur les types de données booléens, consultez Opérateurs de comparaison (Transact-SQL).

Lorsque deux expressions sont combinées avec des opérateurs arithmétiques, de niveau bit ou de chaîne de caractères, l'opérateur détermine le type de donnée du résultat.

Les expressions complexes constituées de nombreux symboles et opérateurs conduisent à un résultat à valeur unique. Le type de données, le classement, la précision et la valeur de l'expression qui en résulte sont déterminés en combinant deux par deux les expressions, et ce jusqu'à l'obtention du résultat final. La séquence selon laquelle les expressions sont combinées est définie par le degré de priorité des opérateurs dans l'expression.

Remarques

Un opérateur peut combiner deux expressions si elles ont toutes deux un type de données pris en charge par l'opérateur et si au moins l'une des conditions suivantes est vraie :

  • les expressions ont le même type de données ;

  • le type de données ayant le degré de priorité le moins élevé peut être implicitement converti dans le type de données ayant le degré de priorité le plus élevé ;

Si les expressions ne respectent pas ces conditions, les fonctions CAST ou CONVERT peuvent servir à convertir explicitement le type de données ayant le degré de priorité le moins élevé, soit dans le type de données ayant le degré de priorité le plus élevé, soit dans un type de données intermédiaire qui peut être implicitement converti dans le type de données ayant le degré de priorité le plus élevé.

Si aucune conversion implicite ou explicite n'est prise en charge, les deux expressions ne peuvent pas être combinées.

Le classement de toute expression qui s'évalue à une chaîne de caractères est défini d'après les règles de priorité des classements. Pour plus d’informations, consultez Priorité de classement (Transact-SQL).

Dans un langage de programmation tel que C ou Microsoft Visual Basic, une expression s’évalue toujours à un résultat unique. Cette règle varie pour les expressions dans une liste de sélection Transact-SQL : l'expression est évaluée individuellement pour chaque ligne dans le jeu de résultats. Une même expression peut avoir une valeur différente dans chaque ligne du jeu de résultats, mais chaque ligne n'a qu'une seule valeur pour l'expression. Par exemple, dans l'instruction SELECT suivante, ProductID et 1+2 dans la liste de sélection sont tous deux des expressions :

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

L'expression 1+2 s'évalue à 3 dans chaque ligne du jeu de résultats. Bien que l'expression ProductID génère une valeur différente dans chaque ligne du jeu de résultats, chaque ligne n'a qu'une seule valeur pour ProductID.

  • Azure Synapse Analytics alloue une quantité de mémoire maximale fixe à chaque thread, de sorte qu’aucun thread ne peut utiliser toute la mémoire. Une partie de cette mémoire est utilisée pour le stockage des expressions des requêtes. Si une requête a trop d’expressions et que sa mémoire nécessaire dépasse la limite interne, le moteur ne l’exécute pas. Pour éviter ce problème, les utilisateurs peuvent transformer la requête en plusieurs requêtes contenant chacune un nombre plus petit d’expressions. Par exemple, vous avez une requête contenant une longue liste d’expressions dans la clause 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 */

Remplacez cette requête par ceci :

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

Voir aussi

AT TIME ZONE (Transact-SQL)
CASE (Transact-SQL)
CAST et CONVERT (Transact-SQL)
COALESCE (Transact-SQL)
Conversion de types de données (Moteur de base de données)
Priorité des types de données (Transact-SQL)
Types de données (Transact-SQL)
Fonctions intégrées (Transact-SQL)
LIKE (Transact-SQL)
NULLIF (Transact-SQL)
SELECT (Transact-SQL)
WHERE (Transact-SQL)