Logische Funktionen – CHOOSE (Transact-SQL)

Gilt für:SQL ServerAzure SQL-DatenbankVerwaltete Azure SQL-InstanzSQL-Analyseendpunkt in Microsoft FabricLagerhaus in Microsoft FabricSQL-Datenbank in Microsoft Fabric

Die Funktion Transact-SQL CHOOSE gibt das Element im angegebenen Index aus einer Liste von Werten im Datenbank-Engine zurück.

Transact-SQL-Syntaxkonventionen

Syntax

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

Argumente

Index

Ein ganzzahliger Ausdruck, der einen 1-basierten Index in der Liste der darauf folgenden Elemente darstellt.

Wenn der angegebene Indexwert einen anderen numerischen Datentyp als int hat, wird der Wert implizit in eine ganze Zahl umgewandelt. Überschreitet der Indexwert die Grenzen des Arrays von Werten, CHOOSE ergibt NULL.

val_1 ... val_n

Liste von kommagetrennten Werten beliebiges Datentyps.

Rückgabetypen

Gibt den Datentyp mit der höchsten Rangfolge aus dem Satz von Typen zurück, der an die Funktion übergeben wurde. Weitere Informationen finden Sie unter "Rangfolge des Datentyps".

Hinweise

CHOOSE wirkt wie ein Index in ein Array, wobei das Array aus den Argumenten besteht, die dem Indexargument folgen. Das Indexargument bestimmt, welcher der folgenden Werte CHOOSE zurückgegeben wird.

Explizit eine extrem große Anzahl von Werten (tausende Werte durch Kommas getrennt) in eine CHOOSE Klausel einzubeziehen, kann Ressourcen verbrauchen und folgenden Fehler zurückgeben:

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.

Beispiele

Die Codebeispiele in diesem Artikel verwenden die AdventureWorks2025, AdventureWorksDW2025, oder AdventureWorksLT2025 Beispieldatenbank, die Sie aus dem Azure Data SQL Samples Repository GitHub-Repository herunterladen können.

A. CHOOSE-Beispiel

Das folgende Beispiel gibt das dritte Element aus der Werteliste zurück.

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

Hier sehen Sie das Ergebnis.

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

B. SELECT-Beispiel basierend auf der Spalte

Das folgende Beispiel liefert eine grundlegende Zeichenkette basierend auf dem Wert in der Spalte ProductCategoryID .

USE AdventureWorks2025;
GO

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

Hier sehen Sie das Ergebnis.

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

C. CHOSSE in Kombination mit MONTH

Das folgende Beispiel zeigt die Saison zurück, in der ein Produktmodell zuletzt modifiziert wurde. Die Funktion MONTH gibt den Monatswert aus der Spalte ModifiedDate zurück.

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 sehen Sie das Ergebnis.

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