Ausdrücke (Transact-SQL)

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Eine Kombination aus Symbolen und Operatoren, die SQL Server-Datenbank-Engine auswertet, 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 for SQL Server and Azure SQL Database  
  
{ constant | scalar_function | [ table_name. ] column | variable   
    | ( expression ) | ( scalar_subquery )   
    | { unary_operator } expression   
    | expression { binary_operator } expression   
    | ranking_windowed_function | aggregate_windowed_function  
}  
-- Syntax for Azure Synapse Analytics and 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 ]  
  

Hinweis

Informationen zum Anzeigen der Transact-SQL-Syntax für SQL Server 2014 oder früher finden Sie unter Dokumentation zu früheren Versionen.

Argumente

Begriff Definition
constant Ein Symbol, das einen einzelnen bestimmten Datenwert darstellt. Weitere Informationen finden Sie unter Konstanten (Transact-SQL).
scalar_function Hierbei handelt es sich um eine Einheit der Transact-SQL-Syntax, die einen bestimmten Dienst bereitstellt und einen einzelnen Wert zurückgibt. Bei scalar_function kann es sich um integrierte Skalarfunktionen wie die SUM-, GETDATE- oder CAST-Funktionen oder um benutzerdefinierte Skalarfunktionen handeln.
[ 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 (Transact-SQL).
(expression) Ein beliebiger gültiger Ausdruck, wie er in diesem Thema 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. 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:

+ zeigt eine positive Zahl an.

- zeigt eine negative Zahl an.

~ zeigt den Einserkomplementoperator an.
{ binary_operator } Ein Operator, der die Art und Weise definiert, in der zwei Ausdrücke kombiniert werden, um ein einzelnes Resultat zu liefern. binary_operator kann ein arithmetischer Operator, der Zuweisungsoperator (=), ein bitweiser Operator, ein Vergleichsoperator, ein logischer Operator, der Operator für Zeichenfolgenverkettung (+) oder ein unärer Operator sein. Weitere Informationen zu Operatoren finden Sie unter Operatoren (Transact-SQL).
ranking_windowed_function Dabei kann es sich um jede Transact-SQL-Rangfolgefunktion handeln. Weitere Informationen finden Sie unter Rangfolgefunktionen (Transact-SQL).
aggregate_windowed_function Hierbei kann es sich um eine beliebige Transact-SQL-Aggregatfunktion mit der OVER-Klausel handeln. Weitere Informationen finden Sie unter OVER-Klausel (Transact-SQL).

Ergebnisse von Ausdrücken

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.

Werden zwei Ausdrücke mithilfe von Vergleichs- oder logischen Operatoren kombiniert, ist das Ergebnis vom booleschen Datentyp. Das Ergebnis nimmt einen der folgenden Werte an: TRUE, FALSE oder UNKNOWN. Weitere Informationen zu booleschen Datentypen finden Sie unter Vergleichsoperatoren (Transact-SQL).

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 mit einem Operator kombiniert werden, wenn die Datentypen beider Ausdrücke vom Operator unterstützt werden und mindestens eine der folgenden Bedingungen erfüllt ist:

  • Die Ausdrücke besitzen den gleichen Datentyp.

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

Falls die Ausdrücke diese Bedingungen nicht erfüllen, kann mit den Funktionen CAST oder CONVERT der Datentyp niedrigerer Rangfolge explizit in den Datentyp höherer Rangfolge konvertiert werden oder in einen dazwischen liegenden Datentyp, der implizit in den Datentyp höherer Rangfolge konvertiert werden kann.

Falls weder die implizite noch die 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 der Sortierungen (Transact-SQL).

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 für jede Zeile im Resultset einen anderen Wert annehmen, aber jede Zeile hat nur genau 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 AdventureWorks2012;  
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 umfasst und der erforderliche Arbeitsspeicher den internen Grenzwert überschreitet, wird Sie von der Engine nicht ausgeführt. 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  */

Siehe auch

AT TIME ZONE (Transact-SQL)
CASE (Transact-SQL)
CAST und CONVERT (Transact-SQL)
COALESCE (Transact-SQL)
Datentypkonvertierung (Datenbank-Engine)
Rangfolge der Datentypen (Transact-SQL).
Datentypen (Transact-SQL)
Integrierte Funktionen (Transact-SQL)
LIKE (Transact-SQL)
NULLIF (Transact-SQL)
SELECT (Transact-SQL)
WHERE (Transact-SQL)