Fonctions logiques - CHOOSE (Transact-SQL)

S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceEndpoint SQL analytics dans Microsoft FabricEntrepôt dans Microsoft FabricBase de données SQL dans Microsoft Fabric

La CHOOSE fonction Transact-SQL renvoie l’élément à l’index spécifié à partir d’une liste de valeurs dans le Moteur de base de données.

Conventions de la syntaxe Transact-SQL

Syntaxe

CHOOSE ( index , val_1 , val_2 [ , val_n ] )

Arguments

index

Expression entière qui représente un index de base 1 dans la liste des éléments qui la suivent.

Si la valeur d’indice fournie possède un type de données numérique autre que int, la valeur est implicitement convertie en entier. Si la valeur de l’indice dépasse les bornes du tableau de valeurs, CHOOSE donne NULL.

val_1 ... val_n

Liste des valeurs séparées par virgules de tout type de données.

Types de retour

Retourne le type de données ayant la priorité la plus élevée à partir de l'ensemble de types transmis à la fonction. Pour plus d’informations, consultez Priorité du type de données.

Remarques

CHOOSE agit comme un index dans un tableau, où le tableau est composé des arguments qui suivent l’argument de l’index. L’argument index détermine laquelle des valeurs CHOOSE suivantes revient.

Inclure explicitement un nombre extrêmement important de valeurs (des milliers de valeurs séparées par des virgules) dans une CHOOSE clause peut consommer des ressources et retourner l’erreur suivante :

Msg 8631, Level 17, State 1, Line 1
Internal error: Server stack limit has been reached. Please look for potentially deep nesting in your query, and try to simplify it.

Exemples

Les exemples de code de cet article utilisent les bases de données d’exemple AdventureWorks2025, AdventureWorksDW2025 ou AdventureWorksLT2025, que vous pouvez télécharger à partir du dépôt GitHub Azure Data SQL Samples Repository.

R. Exemple CHOOSE

L’exemple suivant renvoie le troisième élément de la liste des valeurs.

SELECT CHOOSE(3, 'Manager', 'Director', 'Developer', 'Tester') AS Result;

Voici le jeu de résultats.

Result
-------------
Developer

B. Exemple CHOOSE basé sur la colonne

L’exemple suivant renvoie une chaîne de caractères de base basée sur la valeur dans la ProductCategoryID colonne.

USE AdventureWorks2025;
GO

SELECT ProductCategoryID,
       CHOOSE(ProductCategoryID, 'A', 'B', 'C', 'D', 'E') AS Expression1
FROM Production.ProductCategory;

Voici le jeu de résultats.

ProductCategoryID Expression1
----------------- -----------
3                 C
1                 A
2                 B
4                 D

C. CHOOSE en association avec MONTH

L’exemple suivant renvoie la saison à laquelle un modèle de produit a été modifié pour la dernière fois. La MONTH fonction retourne la valeur du mois de la ModifiedDate colonne.

USE AdventureWorksLT;
GO

SELECT Name,
       ModifiedDate,
       CHOOSE(MONTH(ModifiedDate), 'Winter', 'Winter', 'Spring', 'Spring', 'Spring', 'Summer', 'Summer', 'Summer', 'Autumn', 'Autumn', 'Autumn', 'Winter') AS Quarter_Modified
FROM SalesLT.ProductModel AS PM
WHERE Name LIKE '%Frame%'
ORDER BY ModifiedDate;

Voici le jeu de résultats.

Name                        ModifiedDate            Quarter_Modified
--------------------------- ----------------------- ----------------
HL Road Frame               2002-05-02 00:00:00.000 Spring
HL Mountain Frame           2005-06-01 00:00:00.000 Summer
LL Road Frame               2005-06-01 00:00:00.000 Summer
ML Road Frame               2005-06-01 00:00:00.000 Summer
ML Road Frame-W             2006-06-01 00:00:00.000 Summer
ML Mountain Frame           2006-06-01 00:00:00.000 Summer
ML Mountain Frame-W         2006-06-01 00:00:00.000 Summer
LL Mountain Frame           2006-11-20 09:56:38.273 Autumn
HL Touring Frame            2009-05-16 16:34:28.980 Spring
LL Touring Frame            2009-05-16 16:34:28.980 Spring