Funzioni logiche - CHOOSE (Transact-SQL)

Si applica a:SQL Serverdatabase SQL di AzureIstanza gestita di SQL di AzureEndpoint di analisi SQL in Microsoft FabricWarehouse in Microsoft FabricDatabase SQL in Microsoft Fabric

La CHOOSE funzione Transact-SQL restituisce l'elemento all'indice specificato da una lista di valori nel motore di database.

Convenzioni relative alla sintassi Transact-SQL

Sintassi

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

Argomenti

index

Un'espressione intera che rappresenta un indice basato su 1 nell'elenco degli elementi che lo seguono.

Se il valore dell'indice fornito ha un tipo di dato numerico diverso da int, il valore viene implicitamente convertito in un intero. Se il valore dell'indice supera i limiti dell'array di valori, CHOOSE restituisce NULL.

val_1 ... val_n

Elenco dei valori separati da virgole di qualsiasi tipo di dato.

Tipi restituiti

Restituisce il tipo di dati con precedenza maggiore nel set di tipi passato alla funzione. Per altre informazioni, vedere Precedenza del tipo di dati.

Osservazioni:

CHOOSE agisce come un indice in un array, dove l'array è composto dagli argomenti che seguono l'argomento dell'indice. L'argomento dell'indice determina quale dei seguenti valori CHOOSE restituisce.

Includere esplicitamente un numero estremamente elevato di valori (migliaia di valori separati da virgole) in una CHOOSE clausola può consumare risorse e restituire il seguente errore:

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.

Esempi

Gli esempi di codice in questo articolo utilizzano il AdventureWorks2025, AdventureWorksDW2025, o AdventureWorksLT2025 database di esempi, che puoi scaricare dal repository GitHub Azure Data SQL Samples Repository.

R. Esempio CHOOSE

Il seguente esempio restituisce il terzo elemento dalla lista dei valori.

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

Il set di risultati è il seguente.

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

B. Esempio CHOOSE basato sulla colonna

Il seguente esempio restituisce una stringa di caratteri di base basata sul valore nella ProductCategoryID colonna.

USE AdventureWorks2025;
GO

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

Il set di risultati è il seguente.

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

C. CHOOSE in combinazione con MONTH

Il seguente esempio riporta la stagione in cui un modello di prodotto è stato modificato l'ultima volta. La MONTH funzione restituisce il valore del mese dalla ModifiedDate colonna.

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;

Il set di risultati è il seguente.

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