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 doporučujeme místo příkazu SELECT @SET @local_variable použít.
Syntax
SELECT { @local_variable { = | += | -= | *= | /= | %= | &= | ^= | |= } expression }
[ ,...n ] [ ; ]
Arguments
@ local_variable
Deklarovaná proměnná, pro kterou má být přiřazena hodnota.
{ = | += | -= | *= | /= | %= | &= | ^= | |=}
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ý operátor AND a přiřazení |
| ^= | Bitový XOR a přiřazení |
| |= | Bitový operátor OR a přiřazení |
expression
Libovolný platný výraz. To zahrnuje skalární poddotaz.
Remarks
SELECT @local_variable se obvykle používá 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, je proměnná přiřazena poslední vrácenou hodnotu.
Pokud příkaz SELECT nevrátí žádné řádky, proměnná si zachová její současnou hodnotu. Pokud je výraz skalární poddotaz, který nevrací žádnou hodnotu, proměnná je nastavená na HODNOTU NULL.
Jeden příkaz SELECT může inicializovat více místních proměnných.
Note
Příkaz SELECT, který obsahuje přiřazení proměnné, nelze použít k provádění obvyklých operací načtení sady výsledků.
Examples
A. Použití příkazu SELECT @local_variable k vrácení jedné hodnoty
V následujícím příkladu má proměnná @var1 přiřazenou hodnotu "Obecný název". Dotaz na Store tabulku nevrací žádné řádky, protože hodnota zadaná pro CustomerID tabulku neexistuje. Proměnná zachovává hodnotu "Obecný název".
Tento příklad používá AdventureWorksLT ukázkovou databázi, další informace najdete v tématu Ukázkové databáze AdventureWorks. Databáze AdventureWorksLT se používá jako ukázková databáze pro Azure SQL Database.
-- Uses AdventureWorks2022LT
DECLARE @var1 VARCHAR(30);
SELECT @var1 = 'Generic Name';
SELECT @var1 = [Name]
FROM SalesLT.Product
WHERE ProductID = 1000000; --Value does not exist
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 se poddotaz používá k přiřazení hodnoty .@var1 Vzhledem k tomu, že hodnota požadovaná pro CustomerID neexistuje, poddotaz nevrátí žádnou hodnotu a proměnná je nastavena na NULLhodnotu .
Tento příklad používá AdventureWorksLT ukázkovou databázi, další informace najdete v tématu Ukázkové databáze AdventureWorks. Databáze AdventureWorksLT se používá jako ukázková databáze pro Azure SQL Database.
-- Uses AdventureWorksLT
DECLARE @var1 VARCHAR(30);
SELECT @var1 = 'Generic Name';
SELECT @var1 = (SELECT [Name]
FROM SalesLT.Product
WHERE ProductID = 1000000); --Value does not exist
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 by se aktualizovaly na řádek podle řádku. Může být například @Var nastavena na počáteční hodnotu @Var pro všechny řádky. Důvodem je to, že pořadí a frekvence zpracování přiřazení nejsou neurčetná. To platí pro výrazy obsahující zřetězení řetězců proměnných, jak je znázorněno níže, ale také pro 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.
Pro zřetězení řetězců zvažte STRING_AGG místo toho funkci zavedenou v SQL Serveru 2017 (14.x) pro scénáře, ve kterých je žádoucí zřetězení seřazených řetězců. Další informace najdete v tématu STRING_AGG (Transact-SQL).
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 .
Příklad, který se má vyhnout, kdy použití FUNKCE ORDER BY při pokusu o zřetězení způsobí neúplný seznam:
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;
Výsledná sada:
(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;
Výsledná sada:
(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
Viz také
- DECLARE @local_variable (Transact-SQL)
- Výrazy (Transact-SQL)
- Složené operátory (Transact-SQL)
- SELECT (Transact-SQL)
Další kroky
- ukázkové databáze AdventureWorks