Megosztás a következőn keresztül:


Kifejezések (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példányAzure Synapse AnalyticsElemzési platformrendszer (PDW)SQL Analytics-végpont a Microsoft FabricbenRaktár a Microsoft FabricbenSQL-adatbázis a Microsoft Fabricben

Az SQL Server adatbázismotor által kiértékelt szimbólumok és operátorok kombinációja egyetlen adatérték lekérésére. Az egyszerű kifejezések lehetnek egyetlen állandó, változó, oszlop vagy skaláris függvény. Az operátorok két vagy több egyszerű kifejezés összetett kifejezésbe illesztésére használhatók.

Transact-SQL szintaxis konvenciók

Syntax

Az SQL Server és az Azure SQL Database szintaxisa.

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

Az Azure Synapse Analytics és a párhuzamos adattárház szintaxisa.

-- 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

konstans

Egyetlen, konkrét adatértéket jelképező szimbólum. További információért lásd: Állandók.

scalar_function

Egy Transact-SQL szintaxis egysége, amely egy adott szolgáltatást biztosít, és egyetlen értéket ad vissza. scalar_function lehetnek beépített skaláris függvények, például a SUM, GETDATE(), vagy CAST függvények vagy skaláris felhasználó által definiált függvények.

table_name

Egy tábla neve vagy aliasa.

column

Egy oszlop neve. Egy kifejezésben csak az oszlop neve engedélyezett.

variable

Egy változó vagy paraméter neve. További információért lásd DECLARE @local_variable.

expression

A cikkben meghatározott érvényes kifejezések. A zárójelek olyan csoportosítási operátorok, amelyek biztosítják, hogy a zárójelen belüli kifejezés összes operátora kiértékelve legyen, mielőtt az eredményként kapott kifejezés össze lesz vonva egy másikkal.

scalar_subquery

Egy alquery, amely egy értéket ad vissza. Például:

SELECT MAX(UnitPrice)
FROM Products;

unary_operator

A nem naplós operátorok csak olyan kifejezésekre alkalmazhatók, amelyek a numerikus adattípus kategória bármelyik adattípusára kiértékelnek. Egy olyan operátor, amelynek csak egy numerikus operandusa van:

  • + pozitív számot jelez
  • - negatív számot jelez
  • ~ a komplementer operátort jelzi

binary_operator

Egy operátor, amely meghatározza, hogy a két kifejezés hogyan kombinálható egyetlen eredmény eléréséhez. binary_operator lehet aritmetikai operátor, a hozzárendelési operátor (=), a bitenkénti operátor, az összehasonlító operátor, a logikai operátor, a sztringösszefűző operátor (+) vagy egy nem szereplő operátor. Az operátorokról további információt az Operátorok című témakörben talál.

ranking_windowed_function

Bármely Transact-SQL rangsorolási függvény. További információ: Rangsorolási függvények.

aggregate_windowed_function

Bármely Transact-SQL aggregátumfüggvény az OVER záradékkal. További információ: SELECT – OVER záradék.

Kifejezési eredmények

Egyetlen állandóból, változóból, skaláris függvényből vagy oszlopnévből álló egyszerű kifejezés esetén: a kifejezés adattípusa, rendezése, pontossága, skálázása és értéke a hivatkozott elem adattípusa, rendezése, pontossága, skálázása és értéke.

Ha két kifejezés összehasonlítási vagy logikai operátorok használatával van kombinálva, az eredményül kapott adattípus logikai, az érték pedig a következő: TRUE, FALSEvagy UNKNOWN. A logikai adattípusokról további információt az Összehasonlító operátorok című témakörben talál.

Ha két kifejezés aritmetikai, bitenkénti vagy sztring operátorral van kombinálva, az operátor határozza meg az eredményül kapott adattípust.

A számos szimbólumból és operátorból álló összetett kifejezések egyetlen értékre értékelnek. Az eredményként kapott kifejezés adattípusát, rendezését, pontosságát és értékét az összetevőkifejezések egyesítése határozza meg egyszerre kettővel, amíg el nem éri a végeredményt. A kifejezések kombinálásának sorrendjét a kifejezés operátorainak elsőbbsége határozza meg.

Remarks

Két kifejezés kombinálható egy operátorral, ha mindkettő rendelkezik az operátor által támogatott adattípusokkal, és az alábbi feltételek közül legalább az egyik igaz:

  • A kifejezések adattípusa megegyezik.

  • Az alacsonyabb elsőbbséget élvező adattípus implicit módon konvertálható a magasabb adattípus-előzményű adattípusra.

Ha a kifejezések nem felelnek meg ezeknek a feltételeknek, a függvények vagy CAST függvények CONVERT használhatók. Az alacsonyabb elsőbbséget élvező adattípus használata CAST vagy CONVERT explicit konvertálása a magasabb előzményű adattípusra vagy köztes adattípusra, amely implicit módon konvertálható a magasabb előzményű adattípusra.

Ha nincs támogatott implicit vagy explicit konverzió, a két kifejezés nem kombinálható.

A karaktersztringre kiértékelt kifejezések rendezése a rendezési sorrend szabályainak követésével van beállítva. További információért lásd: Rendezési sorrend.

Egy olyan programozási nyelvben, mint a C vagy a Microsoft Visual Basic, a kifejezés mindig egyetlen eredményre értékel. A Transact-SQL lista kifejezései a szabály egyik változatát követik: A kifejezés kiértékelése külön-külön történik az eredményhalmaz minden sorához. Egyetlen kifejezésnek más értéke lehet az eredményhalmaz minden sorában, de minden sornak csak egy értéke van a kifejezéshez. Az alábbi SELECT utasításban például a kiválasztási listában szereplő hivatkozás ProductID és kifejezés 1+2 is kifejezés:

USE AdventureWorks2022;
GO

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

A kifejezés 1+2 kiértékelése 3 az eredményhalmaz minden sorában történik. Bár a kifejezés ProductID minden eredményhalmaz sorában egyedi értéket hoz létre, minden sorhoz csak egy érték tartozik ProductID.

  • Az Azure Synapse Analytics rögzített maximális memóriamennyiséget foglal le minden szálhoz, így egyetlen szál sem használhatja fel az összes memóriát. A memória egy része a lekérdezések kifejezéseinek tárolására szolgál. Ha egy lekérdezés túl sok kifejezést használ, és a szükséges memória meghaladja a belső korlátot, a motor nem hajtja végre. A probléma elkerülése érdekében a felhasználók több lekérdezésre módosíthatják a lekérdezést, mindegyikben kisebb számú kifejezéssel. Van például egy lekérdezése a WHERE záradékban található kifejezések hosszú listájával:
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 */

A lekérdezés módosítása a következőre:

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  */