Logiska funktioner - VÄLJ (Transact-SQL)

Gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL-analysslutpunkt i Microsoft FabricLager i Microsoft FabricSQL-databas i Microsoft Fabric

Funktionen CHOOSE Transact-SQL returnerar objektet vid det angivna indexet från en lista med värden i Database Engine.

Transact-SQL syntaxkonventioner

Syntax

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

Arguments

index

Ett heltalsuttryck som representerar ett 1-baserat index i listan över posterna efter det.

Om det angivna indexvärdet har en numerisk datatyp annan än int, konverteras värdet implicit till ett heltal. Om indexvärdet överskrider gränserna för matrisen av värden, CHOOSE returnerar NULL.

val_1 ... val_n

Lista över kommaseparerade värden av valfri datatyp.

Returtyper

Returnerar datatypen med högst prioritet från mängden av typer som skickats till funktionen. Mer information finns i Datatypspriorence.

Anmärkningar

CHOOSE fungerar som ett index i en array, där arrayen består av de argument som följer indexargumentet. Indexargumentet avgör vilket av följande värden CHOOSE som returnerar.

Att explicit inkludera ett extremt stort antal värden (tusentals värden separerade av kommatecken) i en CHOOSE klausul kan förbruka resurser och returnera följande fel:

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

Kodexemplen i denna artikel använder AdventureWorks2025, AdventureWorksDW2025, eller AdventureWorksLT2025 exempeldatabasen, som du kan ladda ner från Azure Data SQL Samples Repository GitHub-arkivet.

A. VÄLJ exempel

Följande exempel returnerar det tredje elementet från listan med värden.

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

Här är resultatet.

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

B. SELECT-exempel baserat på kolumn

Följande exempel returnerar en grundläggande teckensträng baserad på värdet i kolumnen ProductCategoryID .

USE AdventureWorks2025;
GO

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

Här är resultatet.

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

C. VÄLJ i kombination med MÅNAD

Följande exempel återger säsongen då en produktmodell senast modifierades. Funktionen MONTH returnerar månadsvärdet från kolumnen ModifiedDate .

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;

Här är resultatet.

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