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
Elemzési platformrendszer (PDW)
SQL Analytics-végpont a Microsoft Fabricben
Raktár a Microsoft Fabricben
SQL-adatbázis a Microsoft Fabricben
A Transact-SQL helyi változók olyan objektumok, amelyek egyetlen, adott típusú adatértéket tartalmazhatnak. A kötegek és szkriptek változóit általában a következők használják:
- Számlálóként vagy a ciklus végrehajtásának hányszoros számának megszámlálásához, vagy a ciklus végrehajtásának hányszorosának szabályozásához.
- Adatérték tárolásához, amelyet egy folyamatvezérlési utasítással kell tesztelni.
- Tárolt eljárás által visszaadandó adatérték mentése a visszaadott kód vagy függvény visszatérési értékeként.
Remarks
Egyes Transact-SQL rendszerfüggvények neve két jellel kezdődik (@@). Bár az SQL Server korábbi verzióiban a @@ függvényeket globális változóknak nevezik, @@ a függvények nem változók, és nem ugyanazokkal a viselkedésekkel rendelkeznek, mint a változók. A @@ függvények rendszerfüggvények, szintaxisuk pedig a függvényekre vonatkozó szabályokat követi.
Nézetben nem használhat változókat.
A változók módosításait nem befolyásolja a tranzakció visszaállítása.
Transact-SQL változó deklarálása
Az DECLARE utasítás inicializál egy Transact-SQL változót a következővel:
Név hozzárendelése. A névnek egyetlen
@karakterrel kell rendelkeznie első karakterként.Rendszer által biztosított vagy felhasználó által definiált adattípus és hossz hozzárendelése. Numerikus változókhoz a pontosság és a skálázás is hozzá van rendelve. XML típusú változókhoz opcionális sémagyűjtemény is hozzárendelhető.
Az érték beállítása a következőre
NULL: .
Az alábbi DECLARE utasítás például létrehoz egy int adattípusú helyi @mycounter. Alapértelmezés szerint ennek a változónak az értéke .NULL
DECLARE @MyCounter INT;
Egynél több helyi változó deklarálásához használjon vesszőt az első definiált helyi változó után, majd adja meg a következő helyi változó nevét és adattípusát.
Az alábbi DECLARE utasítás például három helyi változót @LastNamehoz létre, @FirstName és @StateProvinceinicializálja azokat NULL:
DECLARE @LastName NVARCHAR(30), @FirstName NVARCHAR(20), @StateProvince NCHAR(2);
Egy másik példában a következő DECLARE utasítás létrehoz egy logikai változót@IsActive, amely bitként van deklarálva a (0) értékkel false :
DECLARE @IsActive BIT = 0;
Változó hatókör
A változó hatóköre a változóra hivatkozó Transact-SQL utasítások tartománya. A változó hatóköre a deklarált ponttól a deklarált köteg vagy tárolt eljárás végéig tart, amelyben deklarálva van. A következő szkript például szintaxishibát generál, mert a változó egy kötegben van deklarálva (a GO kulcsszóval elválasztva), és egy másikban hivatkozik rá:
USE AdventureWorks2022;
GO
DECLARE @MyVariable INT;
SET @MyVariable = 1;
GO
SELECT BusinessEntityID,
NationalIDNumber,
JobTitle
FROM HumanResources.Employee
WHERE BusinessEntityID = @MyVariable;
A változók helyi hatókörrel rendelkeznek, és csak abban a kötegben vagy eljárásban láthatók, ahol definiálva vannak. Az alábbi példában a végrehajtáshoz sp_executesql létrehozott beágyazott hatókör nem fér hozzá a magasabb hatókörben deklarált változóhoz, és visszaadja és hibaüzenetet ad vissza.
DECLARE @MyVariable INT;
SET @MyVariable = 1;
EXECUTE sp_executesql N'SELECT @MyVariable'; -- this produces an error
Érték beállítása Transact-SQL változóban
Egy változó első deklarálásakor az értéke a következőre NULLvan állítva: . Ha értéket szeretne hozzárendelni egy változóhoz, használja az utasítást SET . Ez az előnyben részesített módszer egy érték változóhoz való hozzárendeléséhez. A változókhoz egy érték is hozzárendelhető, ha egy utasítás kiválasztási SELECT listájában hivatkoznak rá.
Ha egy változót a SET utasítással szeretne hozzárendelni egy értékhez, adja meg a változó nevét és a változóhoz rendelendő értéket. Ez az előnyben részesített módszer egy érték változóhoz való hozzárendeléséhez. A következő köteg például két változót deklarál, értékeket rendel hozzájuk, majd egy WHERE utasítás záradékában SELECT használja őket:
USE AdventureWorks2022;
GO
-- Declare two variables.
DECLARE @FirstNameVariable NVARCHAR(50),
@PostalCodeVariable NVARCHAR(15);
-- Set their values.
SET @FirstNameVariable = N'Amy';
SET @PostalCodeVariable = N'BA5 3HX';
-- Use them in the WHERE clause of a SELECT statement.
SELECT LastName,
FirstName,
JobTitle,
City,
StateProvinceName,
CountryRegionName
FROM HumanResources.vEmployee
WHERE FirstName = @FirstNameVariable
OR PostalCode = @PostalCodeVariable;
GO
A változókhoz a kijelölési listában hivatkozva is megadható érték. Ha egy változóra egy kijelölési listában hivatkozik, skaláris értéket kell hozzá rendelnie, vagy az SELECT utasításnak csak egy sort kell visszaadnia. Például:
USE AdventureWorks2022;
GO
DECLARE @EmpIDVariable INT;
SELECT @EmpIDVariable = MAX(EmployeeID)
FROM HumanResources.Employee;
GO
Warning
Ha egyetlen SELECT utasításban több hozzárendelési záradék is szerepel, az SQL Server nem garantálja a kifejezések kiértékelési sorrendjét. Az effektusok csak akkor láthatók, ha a hozzárendelések között hivatkozások találhatók.
Ha egy SELECT utasítás több sort ad vissza, és a változó egy nem skálázható kifejezésre hivatkozik, a változó az eredményhalmaz utolsó sorában lévő kifejezéshez visszaadott értékre van állítva. Az alábbi kötegben @EmpIDVariable például az BusinessEntityID utolsó visszaadott sor értéke van beállítva, amely a következő 1:
USE AdventureWorks2022;
GO
DECLARE @EmpIDVariable INT;
SELECT @EmpIDVariable = BusinessEntityID
FROM HumanResources.Employee
ORDER BY BusinessEntityID DESC;
SELECT @EmpIDVariable;
GO
Examples
A következő szkript létrehoz egy kis teszttáblát, és 26 sorból tölti ki. A szkript egy változóval három dolgot hajt végre:
- A ciklus végrehajtásának hányszorosával szabályozhatja, hogy hány sor legyen beszúrva.
- Adja meg az egész szám oszlopba beszúrt értéket.
- Függvény a karakteroszlopba beszúrni kívánt betűket generáló kifejezés részeként.
-- Create the table.
CREATE TABLE TestTable (cola INT, colb CHAR(3));
GO
SET NOCOUNT ON;
GO
-- Declare the variable to be used.
DECLARE @MyCounter INT;
-- Initialize the variable.
SET @MyCounter = 0;
-- Test the variable to see if the loop is finished.
WHILE (@MyCounter < 26)
BEGIN;
-- Insert a row into the table.
INSERT INTO TestTable
VALUES
-- Use the variable to provide the integer value
-- for cola. Also use it to generate a unique letter
-- for each row. Use the ASCII function to get the
-- integer value of 'a'. Add @MyCounter. Use CHAR to
-- convert the sum back to the character @MyCounter
-- characters after 'a'.
(
@MyCounter,
CHAR((@MyCounter + ASCII('a')))
);
-- Increment the variable to count this iteration
-- of the loop.
SET @MyCounter = @MyCounter + 1;
END;
GO
SET NOCOUNT OFF;
GO
-- View the data.
SELECT cola, colb FROM TestTable;
GO
DROP TABLE TestTable;
GO