Sdílet prostřednictvím


Výrazy (Transact-SQL)

Platí pro:SQL ServerAzure SQL DatabaseSpravovaná instance Azure SQLAzure Synapse AnalyticsAnalytics Platform System (PDW)Koncový bod analýzy SQL v Microsoft FabricSklad v Microsoft FabricDatabáze SQL v Microsoft Fabric

Kombinace symbolů a operátorů, které databázový stroj SQL Serveru vyhodnotí za účelem získání jedné datové hodnoty. Jednoduché výrazy můžou být jedna konstanta, proměnná, sloupec nebo skalární funkce. Operátory lze použít ke spojení dvou nebo více jednoduchých výrazů do komplexního výrazu.

Transact-SQL konvence syntaxe

Syntax

Syntaxe pro SQL Server a 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
}

Syntaxe pro Azure Synapse Analytics a paralelní datový sklad

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

konstanta

Symbol, který představuje jednu konkrétní datovou hodnotu. Další informace naleznete v tématu Konstanty.

scalar_function

Jednotka Transact-SQL syntaxe, která poskytuje konkrétní službu a vrací jednu hodnotu. scalar_function mohou být integrované skalární funkce, jako SUMjsou funkce , GETDATE()nebo CAST funkce nebo skalární uživatelem definované funkce.

table_name

Název nebo alias tabulky.

column

Název sloupce. Ve výrazu je povolený pouze název sloupce.

variable

Název proměnné nebo parametru. Další informace najdete v tématu DECLARE @local_variable.

expression

Libovolný platný výraz definovaný v tomto článku. Závorky jsou operátory seskupení, které zajišťují, aby se všechny operátory ve výrazu v závorkách vyhodnocovaly před sloučením výsledného výrazu s jiným.

scalar_subquery

Poddotaz, který vrátí jednu hodnotu. Například:

SELECT MAX(UnitPrice)
FROM Products;

unary_operator

Unární operátory lze použít pouze na výrazy, které se vyhodnocují na libovolný z datových typů kategorie číselného datového typu. Je operátor, který má pouze jeden číselný operand:

  • + označuje kladné číslo.
  • - označuje záporné číslo.
  • ~ označuje operátor doplňku daného operátoru.

binary_operator

Operátor, který definuje způsob, jakým se dva výrazy zkombinují, aby vznikl jediný výsledek. binary_operator může být aritmetický operátor, operátor přiřazení (=), bitový operátor, relační operátor, logický operátor, operátor zřetězení řetězce (+) nebo unární operátor. Další informace o operátorech naleznete v tématu Operátory.

ranking_windowed_function

Libovolná Transact-SQL funkce řazení. Další informace naleznete v tématu Funkce řazení.

aggregate_windowed_function

Libovolná Transact-SQL agregační funkce s klauzulí OVER. Další informace naleznete v tématu SELECT - OVER klauzule.

Výsledky expresí

Jednoduchý výraz tvořený jednou konstantou, proměnnou, skalární funkcí nebo názvem sloupce: datový typ, kolace, přesnost, měřítko a hodnota výrazu je datový typ, kolace, přesnost, měřítko a hodnota odkazovaného prvku.

Pokud jsou dva výrazy sloučeny pomocí porovnání nebo logických operátorů, výsledný datový typ je logický a hodnota je: TRUE, FALSEnebo UNKNOWN. Další informace o logických datových typech naleznete v tématu Relační operátory.

Pokud se dva výrazy zkombinují pomocí aritmetických, bitových nebo řetězcových operátorů, operátor určí výsledný datový typ.

Komplexní výrazy tvořené mnoha symboly a operátory se vyhodnocují jako výsledek s jednou hodnotou. Datový typ, kolace, přesnost a hodnota výsledného výrazu je určen kombinováním výrazů komponent, dvou po sobě, dokud nedosáhne konečného výsledku. Posloupnost, ve které jsou výrazy kombinovány, je definována prioritou operátorů ve výrazu.

Remarks

Dva výrazy mohou být kombinovány operátorem, pokud oba mají datové typy podporované operátorem, a alespoň jedna z těchto podmínek je pravdivá:

  • Výrazy mají stejný datový typ.

  • Datový typ s nižší prioritou lze implicitně převést na datový typ s vyšší prioritou datového typu.

Pokud výrazy tyto podmínky nesplňují, CASTCONVERT je možné použít tyto funkce. CAST Datový CONVERT typ s nižší prioritou můžete explicitně převést na datový typ s vyšší prioritou nebo na zprostředkující datový typ, který lze implicitně převést na datový typ s vyšší prioritou.

Pokud neexistuje žádný podporovaný implicitní ani explicitní převod, nelze tyto dva výrazy zkombinovat.

Kolace libovolného výrazu, který se vyhodnotí jako řetězec znaku, je nastavena podle pravidel priority kolace. Další informace naleznete v tématu Priorita kolace.

V programovacím jazyce, jako je C nebo Microsoft Visual Basic, se výraz vždy vyhodnotí jako jeden výsledek. Výrazy v seznamu Transact-SQL výběr se řídí variantou tohoto pravidla: Výraz se vyhodnocuje jednotlivě pro každý řádek v sadě výsledků. Jeden výraz může mít v každém řádku sady výsledků jinou hodnotu, ale každý řádek má pro výraz pouze jednu hodnotu. Například v následujícím SELECT příkazu jsou odkazy na ProductID a termín 1+2 v seznamu select výrazy:

USE AdventureWorks2022;
GO

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

Výraz 1+2 se vyhodnotí jako 3 v každém řádku v sadě výsledků. Přestože výraz ProductID vygeneruje jedinečnou hodnotu v každém řádku sady výsledků, každý řádek má pouze jednu hodnotu pro ProductID.

  • Azure Synapse Analytics přiděluje každému vláknu pevné maximální množství paměti, takže žádné vlákno nemůže využívat veškerou paměť. Některá z těchto pamětí se používá k ukládání výrazů dotazů. Pokud dotaz obsahuje příliš mnoho výrazů a jeho požadovaná paměť překročí interní limit, modul ho nespustí. Aby se tomuto problému zabránilo, můžou uživatelé dotaz změnit na více dotazů s menším počtem výrazů v každé z nich. Máte například dotaz s dlouhým seznamem výrazů v klauzuli WHERE:
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 */

Změňte tento dotaz na:

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