Freigeben über


Ausdrücke (Transact-SQL)

Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW) SQL Analytics-Endpunkt in Microsoft Fabric Warehouse in Microsoft Fabric

Eine Kombination aus Symbolen und Operatoren, die vom SQL Server Datenbank-Engine ausgewertet werden, um einen einzelnen Datenwert zu erhalten. Einfache Ausdrücke können aus einzelnen Konstanten, Variablen, Spalten oder Skalarfunktionen bestehen. Mithilfe von Operatoren können zwei oder mehrere einfache Ausdrücke zu einem komplexen Ausdruck verknüpft werden.

Transact-SQL-Syntaxkonventionen

Syntax

Syntax für SQL Server und Azure SQL-Datenbank

{ constant | scalar_function | [ table_name. ] column | variable
    | ( expression ) | ( scalar_subquery )
    | { unary_operator } expression
    | expression { binary_operator } expression
    | ranking_windowed_function | aggregate_windowed_function
}

Syntax für Azure Synapse Analytics und Parallel Data Warehouse.

-- Expression in a SELECT statement
<expression> ::=
{
    constant
    | scalar_function
    | column
    | variable
    | ( expression )
    | { unary_operator } expression
    | expression { binary_operator } expression
}
[ COLLATE Windows_collation_name ]

-- Scalar Expression in a DECLARE , SET , IF...ELSE , or WHILE statement
<scalar_expression> ::=
{
    constant
    | scalar_function
    | variable
    | ( expression )
    | (scalar_subquery )
    | { unary_operator } expression
    | expression { binary_operator } expression
}
[ COLLATE [ Windows_collation_name ] ]

Argumente

constant

Ein Symbol, das einen einzelnen, bestimmten Datenwert darstellt. Weitere Informationen finden Sie unter Konstanten.

scalar_function

Eine Einheit der Transact-SQL-Syntax, die einen bestimmten Dienst bereitstellt und einen einzelnen Wert zurückgibt. scalar_function können integrierte skalare Funktionen sein, z. B. die SUM, GETDATE()oder Funktionen oder CAST skalare benutzerdefinierte Funktionen.

table_name

Der Name oder Alias einer Tabelle.

column

Der Name einer Spalte. Nur der Name der Spalte ist in einem Ausdruck zulässig.

variable

Der Name einer Variablen oder eines Parameters. Weitere Informationen finden Sie unter DECLARE @local_variable.

expression

Ein beliebiger gültiger Ausdruck, der in diesem Artikel definiert ist. Die Klammern sind gruppierende Operatoren, die sicherstellen, dass alle Operatoren in dem in Klammern stehenden Ausdruck ausgewertet werden, bevor der resultierende Ausdruck mit einem weiteren Ausdruck kombiniert wird.

scalar_subquery

Eine Unterabfrage, die einen Wert zurückgibt. Zum Beispiel:

SELECT MAX(UnitPrice)
FROM Products;

unary_operator

Unäre Operatoren können nur auf Ausdrücke angewendet werden, die zu einem der Datentypen in der numerischen Datentypkategorie ausgewertet werden. Ein Operator, der nur einen numerischen Operanden besitzt:

  • + gibt eine positive Zahl an.
  • - gibt eine negative Zahl an.
  • ~ gibt den Ergänzungsoperator an.

binary_operator

Ein Operator, der definiert, wie zwei Ausdrücke kombiniert werden, um ein einzelnes Ergebnis zu erzielen. binary_operator kann ein arithmetischer Operator, der Zuordnungsoperator (=), ein bitweiser Operator, ein Vergleichsoperator, ein logischer Operator, der Zeichenfolgenverkettungsoperator (+) oder ein unärer Operator sein. Weitere Informationen zu Operatoren finden Sie unter Operatoren.

ranking_windowed_function

Jede Transact-SQL-Bewertungsfunktion. Weitere Informationen finden Sie unter "Bewertungsfunktionen".

aggregate_windowed_function

Jede Transact-SQL-Aggregatfunktion mit der OVER-Klausel. Weitere Informationen finden Sie unter SELECT - OVER-Klausel.

Ausdrucksergebnisse

Bei einfachen Ausdrücken, die aus einer einzelnen Konstante, Variablen, Skalarfunktion oder einem Spaltennamen bestehen, entsprechen Datentyp, Sortierung, Genauigkeit, Anzahl der Dezimalstellen und Wert des Ausdrucks den jeweiligen Eigenschaften (Datentyp, Sortierung, Genauigkeit usw.) des Elements, auf das verwiesen wird.

Wenn zwei Ausdrücke mithilfe von Vergleichsoperatoren oder logischen Operatoren kombiniert werden, lautet der resultierende Datentyp boolean, und der Wert lautet entweder: TRUE, , FALSEoder UNKNOWN. Weitere Informationen zu booleschen Datentypen finden Sie unter "Vergleichsoperatoren".

Werden zwei Ausdrücke mithilfe von arithmetischen Operatoren, bitweisen Operatoren oder Zeichenfolgenoperatoren kombiniert, bestimmt der Operator den resultierenden Datentyp.

Komplexe Ausdrücke, die aus vielen Symbolen und Operatoren bestehen, werden zu einem Ergebnis mit genau einem Wert ausgewertet. Der Datentyp, die Sortierung, die Genauigkeit und der Wert des resultierenden Ausdrucks werden bestimmt, indem immer jeweils zwei Teilausdrücke kombiniert und ausgewertet werden, bis ein Endergebnis erreicht ist. Die Reihenfolge, in der die Ausdrücke kombiniert werden, ist durch die Rangfolge der Operatoren im Ausdruck definiert.

Hinweise

Zwei Ausdrücke können von einem Operator kombiniert werden, wenn beide Datentypen vom Operator unterstützt werden, und mindestens eine dieser Bedingungen gilt:

  • Die Ausdrücke besitzen den gleichen Datentyp.

  • Der Datentyp niedrigerer Rangfolge kann implizit in den Datentyp höherer Rangfolge konvertiert werden.

Wenn die Ausdrücke diese Bedingungen nicht erfüllen, können die CAST Oder-Funktionen CONVERT verwendet werden. Verwenden CAST oder CONVERT explizit konvertieren Sie den Datentyp mit der niedrigeren Rangfolge entweder in den Datentyp mit der höheren Rangfolge oder in einen Zwischendatentyp, der implizit in den Datentyp mit der höheren Rangfolge konvertiert werden kann.

Wenn keine implizite oder explizite Konvertierung unterstützt wird, können die beiden Ausdrücke nicht kombiniert werden.

Die Sortierung eines Ausdrucks, der zu einer Zeichenfolge ausgewertet wird, wird entsprechend den Regeln zur Sortierungsrangfolge festgelegt. Weitere Informationen finden Sie unter Rangfolge von Sortierungen.

In einer Programmiersprache wie C oder Microsoft Visual Basic wird ein Ausdruck immer zu einem einzelnen Ergebnis ausgewertet. Für Ausdrücke in einer Transact-SQL-Auswahlliste gilt eine Abwandlung dieser Regel: Der Ausdruck wird für jede Zeile des Resultsets einzeln ausgewertet. Ein einzelner Ausdruck kann in jeder Zeile des Resultsets einen anderen Wert aufweisen, aber jede Zeile hat nur einen Wert für den Ausdruck. In der folgenden SELECT-Anweisung sind beispielsweise sowohl der Verweis auf ProductID als auch der Term 1+2 in der Auswahlliste Ausdrücke:

USE AdventureWorks2022;
GO

SELECT ProductID, 1 + 2
FROM Production.Product;
GO

Der Ausdruck 1+2 wird für jede Zeile des Resultsets zu 3 ausgewertet. Obwohl der Ausdruck ProductID für jede Zeile des Resultsets einen eindeutigen Wert erzeugt, besitzt jede Zeile nur genau einen Wert für ProductID.

  • Azure Synapse Analytics ordnet jedem Thread eine maximale Menge an Arbeitsspeicher zu, sodass kein Thread den gesamten Arbeitsspeicher nutzen kann. Ein Teil dieses Arbeitsspeichers dient zum Speichern von Abfrageausdrücken. Wenn eine Abfrage zu viele Ausdrücke enthält und der erforderliche Arbeitsspeicher den internen Grenzwert überschreitet, führt das Modul sie nicht aus. Um dieses Problem zu vermeiden, können Benutzer die Abfrage in mehrere Abfragen mit einer geringeren Anzahl von Ausdrücken ändern. Beispiel: Sie haben eine Abfrage mit einer langen Liste von Ausdrücken in der WHERE-Klausel:
DELETE
FROM dbo.MyTable
WHERE (c1 = '0000001' AND c2 = 'A000001')
    OR (c1 = '0000002' AND c2 = 'A000002')
    OR (c1 = '0000003' AND c2 = 'A000003')
/* ... additional, similar expressions omitted for simplicity */

Ändern Sie diese Abfrage in:

DELETE FROM dbo.MyTable WHERE (c1 = '0000001' AND c2 = 'A000001');
DELETE FROM dbo.MyTable WHERE (c1 = '0000002' AND c2 = 'A000002');
DELETE FROM dbo.MyTable WHERE (c1 = '0000003' AND c2 = 'A000003');
/* ... refactored, individual DELETE statements omitted for simplicity  */