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 használja ahelyettSELECT @local_variable, hogy SET @local_variable .
Transact-SQL szintaxis konvenciók
Syntax
SELECT { @local_variable { = | += | -= | *= | /= | %= | &= | ^= | |= } expression }
[ , ...n ] [ ; ]
Arguments
@local_variable
Deklarált változó, amelyhez értéket rendel hozzá.
{ = | += | -= | *= | /= | %= | &= | ^= | |=}
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 AND és hozzárendelés |
| ^= | Bitenkénti XOR és hozzárendelés |
| |= | Bitenkénti OR és hozzárendelés |
expression
Bármilyen érvényes kifejezés. Ez a kifejezés skaláris alqueryt is tartalmaz.
Remarks
Egyetlen SELECT @local_variable érték visszaadása a változóba. Ha azonban a kifejezés egy oszlop neve, több értéket is visszaadhat. Ha az SELECT utasítás egynél több értéket ad vissza, a változó a lekérdezés által visszaadott utolsó értéket kapja.
Ha az SELECT utasítás nem ad vissza sorokat, a változó megtartja az aktuális értékét. Ha a kifejezés olyan skaláris alquery, amely nem ad vissza értéket, a változó NULLértéke a következő.
Egy SELECT utasítás több helyi változót is inicializálhat.
Note
Nem használhat SELECT változó-hozzárendelést tartalmazó utasítást a tipikus eredményhalmaz-lekérési műveletek végrehajtásához.
Examples
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.
Az AdventureWorksLT adatbázis az Azure SQL Database mintaadatbázisaként használatos.
A. Egyetlen érték visszaadása a SELECT @local_variable használatával
Az alábbi példában a változó @var1 lekéri az értéket 'Generic Name'. 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ó megtartja az "Általános név" értéket.
DECLARE @var1 AS VARCHAR (30);
SELECT @var1 = 'Generic Name';
SELECT @var1 = [Name]
FROM SalesLT.Product
WHERE ProductID = 1000000;
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 al lekérdezés egy értéket rendel hozzá @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.
DECLARE @var1 AS VARCHAR (30);
SELECT @var1 = 'Generic Name';
SELECT @var1 = (SELECT [Name]
FROM SalesLT.Product
WHERE ProductID = 1000000);
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. Előfordulhat például, @Var hogy az összes sor kezdeti értékeként @Var van beállítva. Ez a viselkedés azért fordul elő, mert a hozzárendelések feldolgozásának sorrendje és gyakorisága nem meghatározó. Ez a szabály a változók sztringösszefűzését tartalmazó kifejezésekre vonatkozik, ahogyan az az alábbi példában is látható, de a nem sztringváltozókkal vagy += stílusműveletekkel 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 vegye figyelembe a STRING_AGG függvényt, amelyet a 2017-SQL Server (14.x) tartalmaz, olyan helyzetekben, ahol a rendezett sztringösszefűzést szeretné használni. További információ: STRING_AGG.
Az alábbi példában egy elkerülendő antipattern látható. Az összefűzési kísérlettel ORDER BY a lista hiányos:
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;
Itt van az eredmények összessége.
(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;
Itt van az eredmények összessége.
(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