Nota
L'accés a aquesta pàgina requereix autorització. Podeu provar d'iniciar la sessió o de canviar els directoris.
L'accés a aquesta pàgina requereix autorització. Podeu provar de canviar els directoris.
Se aplica a:SQL Server
Azure SQL Database
Instancia administrada de Azure SQL
Punto de conexión de SQL Analytics en Microsoft Fabric
Almacén en Microsoft Fabric
Base 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