Logische functies - KIES (Transact-SQL)

Van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL Analytics-eindpunt in Microsoft FabricMagazijn in Microsoft FabricSQL-database in Microsoft Fabric

De CHOOSE Transact-SQL functie geeft het item terug op de opgegeven index uit een lijst met waarden in de Database Engine.

Transact-SQL syntaxis-conventies

Syntaxis

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

Arguments

index

Een gehele expressie die een 1-gebaseerde index vertegenwoordigt in de lijst van de volgende items.

Als de gegeven indexwaarde een numeriek datatype heeft dat anders is dan int, wordt de waarde impliciet omgezet naar een geheel getal. Als de indexwaarde de grenzen van de array van waarden overschrijdt, CHOOSE geeft NULL.

val_1 ... val_n

Lijst van komma-gescheiden waarden van elk datatype.

Retourtypen

Geeft het datatype met de hoogste prioriteit terug uit de set types die aan de functie zijn doorgegeven. Zie Prioriteit van gegevenstypevoor meer informatie.

Opmerkingen

CHOOSE werkt als een index in een array, waarbij de array bestaat uit de argumenten die volgen op het indexargument. Het indexargument bepaalt welke van de volgende waarden CHOOSE teruggeeft.

Het expliciet opnemen van een extreem groot aantal waarden (duizenden waarden gescheiden door komma's) in een CHOOSE clausule kan middelen verbruiken en de volgende fout teruggeven:

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.

Voorbeelden

De codevoorbeelden in dit artikel gebruiken de AdventureWorks2025, AdventureWorksDW2025, of AdventureWorksLT2025 voorbeelddatabase, die je kunt downloaden van de Azure Data SQL Samples Repository GitHub-repository.

Eén. CHOOSE-voorbeeld

Het volgende voorbeeld geeft het derde item uit de lijst met waarden terug.

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

Hier is het resultatenoverzicht.

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

B. SELECT-voorbeeld gebaseerd op kolom

Het volgende voorbeeld geeft een basistekenreeks terug op basis van de waarde in de ProductCategoryID kolom.

USE AdventureWorks2025;
GO

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

Hier is het resultatenoverzicht.

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

C. KIES in combinatie met MAAND

Het volgende voorbeeld geeft het seizoen terug waarin een productmodel voor het laatst werd aangepast. De MONTH functie geeft de maandwaarde uit de ModifiedDate kolom terug.

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;

Hier is het resultatenoverzicht.

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