Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Felügyelt Azure SQL-példány
Azure Synapse Analytics
SQL Analytics-végpont a Microsoft Fabricben
Raktár a Microsoft Fabricben
SQL-adatbázis a Microsoft Fabricben
Egy helyi változót egy kifejezés értékére állít be.
Változók hozzárendeléséhez a SELECT @SET @local_variable helyett ajánlott használni.
Transact-SQL szintaxis konvenciók
Syntax
SELECT { @local_variable { = | += | -= | *= | /= | %= | &= | ^= | |= } expression }
[ ,...n ] [ ; ]
Arguments
@ local_variable
Deklarált változó, amelyhez értéket kell hozzárendelni.
{ = | += | -= | *= | /= | %= | &= | ^= | |=}
Rendelje hozzá a jobb oldali értéket a bal oldali változóhoz.
Összetett hozzárendelés operátora:
| Operator | Action |
|---|---|
| = | A következő kifejezést rendeli hozzá a változóhoz. |
| += | Hozzáadás és hozzárendelés |
| -= | Kivonás és hozzárendelés |
| *= | Szorzás és hozzárendelés |
| /= | Osztás és hozzárendelés |
| %= | Modulo és hozzárendelés |
| &= | Bitenkénti ÉS és hozzárendelés |
| ^= | Bitenkénti XOR és hozzárendelés |
| |= | Bitenkénti VAGY és hozzárendelés |
expression
Bármilyen érvényes kifejezés. Ez magában foglal egy skaláris alqueryt is.
Remarks
A SELECT @local_variable általában egyetlen értéket ad vissza a változóba. Ha azonban a kifejezés egy oszlop neve, több értéket is visszaadhat. Ha a SELECT utasítás egynél több értéket ad vissza, a változóhoz az utolsó visszaadott érték lesz hozzárendelve.
Ha a SELECT utasítás nem ad vissza sorokat, a változó megtartja a jelenlegi értékét. Ha a kifejezés olyan skaláris alquery, amely nem ad vissza értéket, a változó értéke NULL.
Egy SELECT utasítás több helyi változót is inicializálhat.
Note
A változó-hozzárendelést tartalmazó SELECT utasítás nem használható a tipikus eredményhalmaz-lekérési műveletek végrehajtására is.
Examples
A. Egyetlen érték visszaadása a SELECT @local_variable használatával
Az alábbi példában a változó @var1 értéke "Általános név" lesz. A tábla lekérdezése Store nem ad vissza sorokat, mert a megadott CustomerID érték nem létezik a táblában. A változó megőrzi az "Általános név" értéket.
Ez a példa a AdventureWorksLT mintaadatbázist használja, további információkért lásd: AdventureWorks mintaadatbázisok. Az AdventureWorksLT adatbázis az Azure SQL Database mintaadatbázisaként használatos.
-- 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';
Itt van az eredmények összessége.
ProductName
------------------------------
Generic Name
B. Null értéket ad vissza a SELECT @local_variable használatával
Az alábbi példában egy alquery használatával rendelünk hozzá egy értéket @var1. Mivel a kért CustomerID érték nem létezik, az al lekérdezés nem ad vissza értéket, és a változó értéke NULL.
Ez a példa a AdventureWorksLT mintaadatbázist használja, további információkért lásd: AdventureWorks mintaadatbázisok. Az AdventureWorksLT adatbázis az Azure SQL Database mintaadatbázisaként használatos.
-- 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';
Itt van az eredmények összessége.
Company Name
----------------------------
NULL
C. Rekurzív változó hozzárendelésének antipattern használata
Kerülje a következő mintát a változók és kifejezések rekurzív használatához:
SELECT @Var = <expression containing @Var>
FROM
...
Ebben az esetben nem garantált, hogy @Var sorról sorra frissül. Beállíthatja például az @Var összes sor kezdeti értékét @Var . Ennek az az oka, hogy a hozzárendelések feldolgozásának sorrendje és gyakorisága nem meghatározó. Ez a változók sztringösszefűzését tartalmazó kifejezésekre vonatkozik, az alábbiakban bemutatott módon, de a nem sztringváltozókkal vagy += stílus operátorokkal rendelkező kifejezésekre is. Sorról sorra művelet helyett használjon aggregációs függvényeket egy halmazalapú művelethez.
Sztringösszefűzés esetén inkább vegye figyelembe az STRING_AGG SQL Server 2017-ben (14.x) bevezetett függvényt olyan helyzetekben, ahol a rendezett sztringösszefűzésre van szükség. További információ: STRING_AGG (Transact-SQL).
A cikkben szereplő kódminták a AdventureWorks2025 vagy AdventureWorksDW2025 mintaadatbázist használják, amelyet a Microsoft SQL Server-minták és közösségi projektek kezdőlapjáról tölthet le.
Egy példa az elkerülésére, ha az ORDER BY használata az összefűzési kísérlet során a lista nem teljes:
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;
Eredményhalmaz:
(No column name)
---
Walker
Ehelyett fontoljuk meg:
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;
Eredményhalmaz:
(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
Lásd még
- DECLARE @local_variable (Transact-SQL)
- Kifejezések (Transact-SQL)
- Összetett operátorok (Transact-SQL)
- VÁLASZT (Transact-SQL)