Partager via


Expressions (Transact-SQL)

S’applique à : SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW) SQL analytics endpoint in Microsoft Fabric Warehouse in Microsoft Fabric

Combinaison de symboles et d’opérateurs que SQL Server Moteur de base de données évalue pour obtenir une valeur de données unique. 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.

Conventions de la syntaxe Transact-SQL

Syntaxe

Syntaxe pour SQL Server et 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
}

Syntaxe pour Azure Synapse Analytics et 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 ] ]

Arguments

constant

Symbole qui représente une valeur de données unique et spécifique. Pour plus d’informations, consultez Constantes.

scalar_function

Unité de syntaxe Transact-SQL qui fournit un service spécifique et retourne une valeur unique. scalar_function peuvent être des fonctions scalaires intégrées, telles que les SUMfonctions , GETDATE()ou CAST les 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.

expression

Toute expression valide telle que définie dans cet article. 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 retourne 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 de celui-ci

binary_operator

Opérateur qui définit la façon dont deux expressions sont combinées pour produire un résultat unique. binary_operator peut être un opérateur arithmétique, l’opérateur d’affectation (=), un opérateur au niveau du bit, un opérateur de comparaison, un opérateur logique, l’opérateur de concaténation de chaîne (+) ou un opérateur unaire. Pour plus d’informations sur les opérateurs, consultez Opérateurs.

ranking_windowed_function

Toute fonction de classement Transact-SQL. Pour plus d’informations, consultez Fonctions de classement.

aggregate_windowed_function

Toute fonction d’agrégation Transact-SQL avec la clause OVER. Pour plus d’informations, consultez la clause SELECT - OVER.

Résultats de l’expression

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 à l’aide d’opérateurs de comparaison ou logiques, le type de données résultant est booléen et la valeur est : TRUE, FALSEou UNKNOWN. Pour plus d’informations sur les types de données booléens, consultez Opérateurs de comparaison.

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.

Notes

Deux expressions peuvent être combinées par un opérateur s’ils ont tous deux des types de données pris en charge par l’opérateur, et au moins l’une de ces conditions 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 répondent pas à ces conditions, les fonctions ou CONVERT les CAST fonctions peuvent être utilisées. Utilisez ou CONVERT convertissez CAST explicitement le type de données avec la priorité inférieure vers le type de données avec la priorité la plus élevée ou vers un type de données intermédiaire qui peut être implicitement converti en type de données avec la priorité la plus élevée.

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 Précédence de classement.

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 seule 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 AdventureWorks2022;
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 requise 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  */