Funções lógicas - ESCOLHA (Transact-SQL)

Aplica-se a:SQL ServerBase de Dados SQL do AzureAzure SQL Managed InstanceEndpoint de análise SQL no Microsoft FabricArmazém no Microsoft FabricBase de dados SQL no Microsoft Fabric

A CHOOSE função Transact-SQL devolve o item no índice especificado a partir de uma lista de valores no Database Engine.

Transact-SQL convenções de sintaxe

Sintaxe

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

Arguments

índice

Uma expressão inteira que representa um índice baseado em 1 na lista dos itens seguintes.

Se o valor do índice fornecido tiver um tipo de dado numérico diferente de int, o valor é implicitamente convertido num inteiro. Se o valor do índice exceder os limites do array de valores, CHOOSE devolve NULL.

val_1 ... val_n

Lista de valores separados por vírgulas de qualquer tipo de dado.

Tipos de devolução

Devolve o tipo de dado com a precedência mais alta do conjunto de tipos passados para a função. Para obter mais informações, consulte Precedência de tipo de dados.

Observações

CHOOSE atua como um índice dentro de um array, onde o array é composto pelos argumentos que seguem o argumento do índice. O argumento índice determina qual dos valores seguintes CHOOSE retorna.

Incluir explicitamente um número extremamente grande de valores (milhares de valores separados por vírgulas) numa CHOOSE cláusula pode consumir recursos e devolver o seguinte erro:

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.

Examples

Os exemplos de código neste artigo utilizam a AdventureWorks2025, AdventureWorksDW2025, ou AdventureWorksLT2025 base de dados de exemplos, que pode descarregar do repositório GitHub do Azure Data SQL Samples Repository.

A. Exemplo CHOOSE

O exemplo seguinte devolve o terceiro item da lista de valores.

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

Aqui está o conjunto de resultados.

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

B. Exemplo CHOOSE com base na coluna

O exemplo seguinte devolve uma cadeia básica de caracteres baseada no valor na ProductCategoryID coluna.

USE AdventureWorks2025;
GO

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

Aqui está o conjunto de resultados.

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

C. ESCOLHA em combinação com MÊS

O exemplo seguinte retorna à estação em que um modelo de produto foi modificado pela última vez. A MONTH função devolve o valor do mês da ModifiedDate coluna.

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;

Aqui está o 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