Delen via


Expressions (Transact-SQL)

Van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL Analytics-eindpunt in Microsoft FabricMagazijn in Microsoft FabricSQL-database in Microsoft Fabric Preview

Een combinatie van symbolen en operators die de SQL Server Database Engine evalueert om één gegevenswaarde te verkrijgen. Eenvoudige expressies kunnen één constante, variabele, kolom of scalaire functie zijn. Operators kunnen worden gebruikt om twee of meer eenvoudige expressies samen te voegen in een complexe expressie.

Transact-SQL syntaxis-conventies

Syntax

Syntaxis voor SQL Server en 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
}

Syntaxis voor Azure Synapse Analytics en 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 ] ]

Arguments

constant

Een symbool dat één specifieke gegevenswaarde vertegenwoordigt. Zie Constanten voor meer informatie.

scalar_function

Een eenheid van Transact-SQL syntaxis die een specifieke service biedt en één waarde retourneert. scalar_function kunnen ingebouwde scalaire functies zijn, zoals de SUM, GETDATE()of CAST functies of scalaire door de gebruiker gedefinieerde functies.

table_name

De naam of alias van een tabel.

column

De naam van een kolom. Alleen de naam van de kolom is toegestaan in een expressie.

variable

De naam van een variabele of parameter. Zie DECLARE @local_variable voor meer informatie.

expression

Elke geldige expressie zoals gedefinieerd in dit artikel. De haakjes groeperen operators die ervoor zorgen dat alle operators in de expressie tussen haakjes worden geëvalueerd voordat de resulterende expressie wordt gecombineerd met een andere.

scalar_subquery

Een subquery die één waarde retourneert. For example:

SELECT MAX(UnitPrice)
FROM Products;

unary_operator

Unaire operators kunnen alleen worden toegepast op expressies die resulteren in een van de gegevenstypen van de categorie numeriek gegevenstype. Is een operator met slechts één numerieke operand:

  • + geeft een positief getal aan
  • - geeft een negatief getal aan
  • ~ geeft de complementoperator van de ene aan

binary_operator

Een operator die definieert hoe twee expressies worden gecombineerd om één resultaat te verkrijgen. binary_operator kan een rekenkundige operator zijn, de toewijzingsoperator (=), een bitsgewijze operator, een vergelijkingsoperator, een logische operator, de operator voor tekenreekssamenvoeging (+) of een unaire operator. Zie Operators voor meer informatie over operators.

ranking_windowed_function

Elke Transact-SQL rangschikkingsfunctie. Zie Classificatiefuncties voor meer informatie.

aggregate_windowed_function

Elke Transact-SQL statistische functie met de OVER-component. Zie SELECT - OVER-component voor meer informatie.

Expression results

Voor een eenvoudige expressie die bestaat uit één constante, variabele, scalaire functie of kolomnaam: het gegevenstype, sortering, precisie, schaal en waarde van de expressie is het gegevenstype, sortering, precisie, schaal en waarde van het element waarnaar wordt verwezen.

Wanneer twee expressies worden gecombineerd met behulp van vergelijkings- of logische operatoren, is het resulterende gegevenstype Booleaanse waarde en de waarde: TRUE, FALSEof UNKNOWN. Zie Vergelijkingsoperatoren voor meer informatie over Booleaanse gegevenstypen.

Wanneer twee expressies worden gecombineerd met rekenkundige, bitsgewijze operatoren of tekenreeksoperatoren, bepaalt de operator het resulterende gegevenstype.

Complexe expressies bestaan uit veel symbolen en operatoren die resulteren in een resultaat met één waarde. Het gegevenstype, de sortering, de precisie en de waarde van de resulterende expressie wordt bepaald door de onderdeelexpressies, twee tegelijk, te combineren totdat het uiteindelijke resultaat is bereikt. De volgorde waarin de expressies worden gecombineerd, wordt gedefinieerd door de prioriteit van de operators in de expressie.

Remarks

Twee expressies kunnen worden gecombineerd door een operator als ze beide gegevenstypen hebben die door de operator worden ondersteund, en ten minste één van deze voorwaarden is waar:

  • De expressies hebben hetzelfde gegevenstype.

  • Het gegevenstype met de lagere prioriteit kan impliciet worden geconverteerd naar het gegevenstype met de hogere prioriteit voor het gegevenstype.

Als de expressies niet aan deze voorwaarden voldoen, kunnen de CAST of CONVERT functies worden gebruikt. Gebruik CAST of CONVERT converteer het gegevenstype expliciet met de lagere prioriteit naar het gegevenstype met de hogere prioriteit of naar een tussenliggend gegevenstype dat impliciet kan worden geconverteerd naar het gegevenstype met de hogere prioriteit.

Als er geen ondersteunde impliciete of expliciete conversie is, kunnen de twee expressies niet worden gecombineerd.

De sortering van een expressie die resulteert in een tekenreeks, wordt ingesteld door de regels van sorteringsprioriteit te volgen. Zie sorteringsprioriteitvoor meer informatie.

In een programmeertaal zoals C of Microsoft Visual Basic evalueert een expressie altijd tot één resultaat. Expressies in een Transact-SQL selectielijst volgen een variatie op deze regel: de expressie wordt afzonderlijk geëvalueerd voor elke rij in de resultatenset. Eén expressie kan een andere waarde hebben in elke rij van de resultatenset, maar elke rij heeft slechts één waarde voor de expressie. In de volgende SELECT instructie zijn bijvoorbeeld zowel de verwijzing naar ProductID als de term 1+2 in de selectielijst expressies:

USE AdventureWorks2022;
GO

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

De expressie 1+2 evalueert in 3 elke rij in de resultatenset. Hoewel de expressie ProductID een unieke waarde genereert in elke rij met resultatensets, heeft elke rij slechts één waarde voor ProductID.

  • Azure Synapse Analytics wijst een vaste maximale hoeveelheid geheugen toe aan elke thread, zodat geen enkele thread al het geheugen kan gebruiken. Sommige van dit geheugen worden gebruikt voor het opslaan van expressies van query's. Als een query te veel expressies heeft en het vereiste geheugen de interne limiet overschrijdt, voert de engine deze niet uit. Om dit probleem te voorkomen, kunnen gebruikers de query wijzigen in meerdere query's met een kleiner aantal expressies. U hebt bijvoorbeeld een query met een lange lijst met expressies in de WHERE-component:
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 */

Wijzig deze query 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  */