Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro:SQL Server
Azure SQL Database
Spravovaná instance
Azure SQLAzure Synapse Analytics
Koncový bod analýzy SQL v Microsoft Fabric
Sklad v Microsoft Fabric
Databáze SQL v Microsoft Fabric
Nastaví místní proměnnou na hodnotu výrazu.
Pro přiřazování proměnných použijte SET @local_variable místo SELECT @local_variable.
Syntax
SELECT { @local_variable { = | += | -= | *= | /= | %= | &= | ^= | |= } expression }
[ , ...n ] [ ; ]
Arguments
@local_variable
Deklarovaná proměnná, pro kterou přiřadíte hodnotu.
{ = | += | -= | *= | /= | %= | &= | ^= | |=}
Přiřaďte hodnotu vpravo proměnné vlevo.
Operátor složeného přiřazení:
| Operator | Action |
|---|---|
| = | Přiřadí následující výraz proměnné. |
| += | Přidat a přiřadit |
| -= | Odečtení a přiřazení |
| *= | Násobení a přiřazení |
| /= | Dělit a přiřazovat |
| %= | Modulo a přiřazení |
| &= | Bitové a AND přiřazování |
| ^= | Bitové a XOR přiřazování |
| |= | Bitové a OR přiřazování |
expression
Libovolný platný výraz. Tento termín zahrnuje skalární poddotaz.
Remarks
Slouží SELECT @local_variable k vrácení jedné hodnoty do proměnné. Pokud je však výraz názvem sloupce, může vrátit více hodnot. Pokud příkaz SELECT vrátí více než jednu hodnotu, získá proměnná poslední hodnotu, kterou dotaz vrátí.
SELECT Pokud příkaz nevrátí žádné řádky, proměnná zachová aktuální hodnotu. Pokud je výraz skalární poddotaz, který nevrací žádnou hodnotu, proměnná je nastavena na NULLhodnotu .
Jeden SELECT příkaz může inicializovat více místních proměnných.
Note
Nemůžete použít SELECT příkaz, který obsahuje přiřazení proměnné k provádění obvyklých operací načtení sady výsledků.
Examples
Ukázky kódu v tomto článku používají ukázkovou databázi AdventureWorks2025 nebo AdventureWorksDW2025, kterou si můžete stáhnout z domovské stránky Microsoft SQL Serveru pro ukázky a komunitní projekty .
Databáze AdventureWorksLT se používá jako ukázková databáze pro Azure SQL Database.
A. Použití příkazu SELECT @local_variable k vrácení jedné hodnoty
V následujícím příkladu získá proměnná @var1 hodnotu 'Generic Name'. Dotaz na Store tabulku nevrací žádné řádky, protože hodnota zadaná pro CustomerID tabulku neexistuje. Proměnná uchovává hodnotu "Obecný název".
DECLARE @var1 AS VARCHAR (30);
SELECT @var1 = 'Generic Name';
SELECT @var1 = [Name]
FROM SalesLT.Product
WHERE ProductID = 1000000;
SELECT @var1 AS 'ProductName';
Tady je soubor výsledků.
ProductName
------------------------------
Generic Name
B. Použití příkazu SELECT @local_variable k vrácení hodnoty null
V následujícím příkladu poddotaz přiřadí hodnotu @var1. Vzhledem k tomu, že hodnota požadovaná pro CustomerID neexistuje, poddotaz nevrátí žádnou hodnotu a proměnná je nastavena na NULLhodnotu .
DECLARE @var1 AS VARCHAR (30);
SELECT @var1 = 'Generic Name';
SELECT @var1 = (SELECT [Name]
FROM SalesLT.Product
WHERE ProductID = 1000000);
SELECT @var1 AS 'Company Name';
Tady je soubor výsledků.
Company Name
----------------------------
NULL
C. Antipattern použití rekurzivního přiřazení proměnné
Vyhněte se následujícímu vzoru pro rekurzivní použití proměnných a výrazů:
SELECT @Var = <expression containing @Var>
FROM
...
V tomto případě není zaručeno, že @Var se aktualizuje na řádek podle řádku. Může být například @Var nastavena na počáteční hodnotu @Var pro všechny řádky. K tomuto chování dochází, protože pořadí a frekvence zpracování přiřazení jsou nedeterminantní. Toto pravidlo se vztahuje na výrazy obsahující zřetězení řetězců proměnných, jak je znázorněno v následujícím příkladu, ale také na výrazy s neřetězcovými proměnnými nebo += operátory stylu. Místo operace založené na sadě místo operace po řádku použijte agregační funkce.
U zřetězení řetězců zvažte funkci STRING_AGG, která je zavedena v SQL Server 2017 (14.x), ve scénářích, ve kterých je žádoucí zřetězení seřazených řetězců. Další informace najdete v tématu STRING_AGG.
Následující příklad ukazuje antipattern, který se má vyhnout. Použití ORDER BY při pokusu o zřetězení způsobí, že seznam bude neúplný:
DECLARE @List AS NVARCHAR (MAX);
SELECT @List = CONCAT(COALESCE (@List + ', ', ''), p.LastName)
FROM Person.Person AS p
WHERE p.FirstName = 'William'
ORDER BY p.BusinessEntityID;
SELECT @List;
Tady je soubor výsledků.
(No column name)
---
Walker
Místo toho zvažte:
DECLARE @List AS NVARCHAR (MAX);
SELECT @List = STRING_AGG(p.LastName, ', ') WITHIN GROUP (ORDER BY p.BusinessEntityID)
FROM Person.Person AS p
WHERE p.FirstName = 'William';
SELECT @List;
Tady je soubor výsledků.
(No column name)
---
Vong, Conner, Hapke, Monroe, Richter, Sotelo, Vong, Ngoh, White, Harris, Martin, Thompson, Martinez, Robinson, Clark, Rodriguez, Smith, Johnson, Williams, Jones, Brown, Davis, Miller, Moore, Taylor, Anderson, Thomas, Lewis, Lee, Walker
Související obsah
- DECLARE @local_variable (Transact-SQL)
- Výrazy (Transact-SQL)
- Složené operátory (Transact-SQL)
- SELECT (Transact-SQL)
- ukázkové databáze AdventureWorks