Megosztás a következőn keresztül:


SELECT @local_variable (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példányAzure Synapse AnalyticsSQL Analytics-végpont a Microsoft FabricbenRaktár a Microsoft FabricbenSQL-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

Következő lépések