Funciones lógicas - CHOOSE (Transact-SQL)

Se aplica a:SQL ServerAzure SQL DatabaseInstancia administrada de Azure SQLPunto de conexión de SQL Analytics en Microsoft FabricAlmacén en Microsoft FabricBase de datos SQL en Microsoft Fabric

La CHOOSE función Transact-SQL devuelve el elemento en el índice especificado de una lista de valores en el Motor de base de datos.

Convenciones de sintaxis de Transact-SQL

Sintaxis

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

Argumentos

índice

Expresión de entero que representa un índice basado en 1 en la lista de los elementos que lo siguen.

Si el valor de índice proporcionado tiene un tipo de dato numérico distinto de int, el valor se convierte implícitamente en un entero. Si el valor del índice excede los límites del array de valores, CHOOSE devuelve NULL.

val_1 ... val_n

Lista de valores separados por comas de cualquier tipo de dato.

Tipos de retorno

Devuelve el tipo de datos con la mayor prioridad del conjunto de tipos pasados a la función. Para obtener más información, consulte Precedencia de tipos de datos.

Comentarios

CHOOSE actúa como un índice dentro de un array, donde el array está compuesto por los argumentos que siguen al argumento del índice. El argumento índice determina cuál de los siguientes valores CHOOSE devuelve el resultado.

Incluir explícitamente un número extremadamente grande de valores (miles de valores separados por comas) en una CHOOSE cláusula puede consumir recursos y devolver el siguiente error:

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.

Ejemplos

Los ejemplos de código de este artículo utilizan la base de datos de ejemplo AdventureWorks2025, AdventureWorksDW2025 o AdventureWorksLT2025, que puedes descargar del repositorio de GitHub Azure Data SQL Samples Repository.

A. Ejemplo CHOOSE

El siguiente ejemplo devuelve el tercer elemento de la lista de valores.

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

Este es el conjunto de resultados.

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

B. Ejemplo CHOOSE basado en la columna

El siguiente ejemplo devuelve una cadena básica de caracteres basada en el valor de la ProductCategoryID columna.

USE AdventureWorks2025;
GO

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

Este es el conjunto de resultados.

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

C. CHOOSE en combinación con MONTH

El siguiente ejemplo devuelve la temporada en la que un modelo de producto fue modificado por última vez. La MONTH función devuelve el valor del mes de la ModifiedDate columna.

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;

Este es el conjunto de resultados.

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