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

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada de SQL do AzureEndpoint de SQL Analytics no Microsoft FabricArmazém no Microsoft FabricBanco de Dados SQL no Microsoft Fabric

A CHOOSE função Transact-SQL retorna o item no índice especificado a partir de uma lista de valores no Mecanismo de Banco de Dados.

Convenções de sintaxe de Transact-SQL

Sintaxe

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

Argumentos

index

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

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

val_1 ... val_n

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

Tipos de retorno

Retorna o tipo de dados com a precedência mais alta do conjunto de tipos transmitido à função. Para obter mais informações, consulte Precedência de tipo de dados.

Comentários

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 seguintes valores CHOOSE retorna.

Incluir explicitamente um número extremamente grande de valores (milhares de valores separados por vírgulas) em uma 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.

Exemplos

Os exemplos de código neste artigo usam o AdventureWorks2025, AdventureWorksDW2025, ou AdventureWorksLT2025 banco de dados de exemplo, que você pode baixar do repositório GitHub do Azure Data SQL Samples Repository.

a. Exemplo CHOOSE

O exemplo a seguir retorna o terceiro item da lista de valores.

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

Veja a seguir o conjunto de resultados.

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

B. Exemplo CHOOSE baseado na coluna

O exemplo a seguir retorna uma string 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;

Veja a seguir o conjunto de resultados.

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

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

O exemplo a seguir retorna à temporada em que um modelo de produto foi modificado pela última vez. A MONTH função retorna 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;

Veja a seguir 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