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 SQL
Azure Synapse Analytics
Analytics Platform System (PDW)
Koncový bod analýzy SQL v Microsoft Fabric
Sklad v Microsoft Fabric
Databáze SQL v Microsoft Fabric
Místní proměnná Transact-SQL je objekt, který může obsahovat jednu datovou hodnotu určitého typu. Proměnné se obvykle používají v dávkách a skriptech pro následující účely:
- Pomocí proměnné jako čítače můžete spočítat, kolikrát se smyčka provádí, nebo určit, kolikrát se smyčka provádí.
- Podržte hodnotu dat, kterou chcete testovat pomocí příkazu control-of-flow.
- Uložte datovou hodnotu, kterou vrátí uložená procedura, vrátí kód nebo návratovou hodnotu funkce.
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 .
Remarks
Názvy některých systémových funkcí Transact-SQL začínají dvěma písmeny (@@). I když starší verze SQL Serveru odkazují na @@ funkce jako globální proměnné, @@ funkce nejsou proměnné a nemají stejné chování jako proměnné. Funkce @@ jsou systémové funkce a jejich použití syntaxe se řídí pravidly pro funkce.
Proměnné nemůžete použít v zobrazení.
Změny proměnných nejsou ovlivněny vrácením transakce zpět.
Deklarace proměnné Transact-SQL
DECLARE Pomocí příkazu inicializujete Transact-SQL proměnnou podle:
Přiřazení názvu Název musí začínat jedním
@znakem.Přiřazení systémového nebo uživatelem definovaného datového typu a délky U číselných proměnných můžete přiřadit přesnost a volitelné měřítko. U proměnných typu XML můžete volitelně přiřadit kolekci schémat.
Nastavení hodnoty na
NULLhodnotu .
Následující příkaz například DECLARE vytvoří místní proměnnou s datovým @mycounter typem int . Ve výchozím nastavení je NULLhodnota této proměnné .
DECLARE @MyCounter AS INT;
Chcete-li deklarovat více než jednu místní proměnnou, použijte čárku za první definici místní proměnné a potom zadejte další název místní proměnné a datový typ.
Následující příkaz například DECLARE vytvoří tři místní proměnné s názvem @LastName, @FirstNamea @StateProvincea inicializuje je na NULL:
DECLARE @LastName AS NVARCHAR (30),
@FirstName AS NVARCHAR (20),
@StateProvince AS NCHAR (2);
V jiném příkladu následující DECLARE příkaz vytvoří logickou proměnnou s názvem @IsActive, která je deklarována jako bit s hodnotou 0 (false):
DECLARE @IsActive AS BIT = 0;
Proměnný rozsah
Rozsah proměnné je rozsah příkazů Transact-SQL, které mohou odkazovat na proměnnou. Rozsah proměnné trvá od bodu, který je deklarován až do konce dávky nebo uložené procedury, ve které je deklarována. Například následující skript vygeneruje chybu syntaxe, protože proměnná je deklarována v jedné dávce (oddělená klíčovým slovem GO ) a odkazuje na ni v jiné:
USE AdventureWorks2025;
GO
DECLARE @MyVariable AS INT;
SET @MyVariable = 1;
SELECT BusinessEntityID,
NationalIDNumber,
JobTitle
FROM HumanResources.Employee
WHERE BusinessEntityID = @MyVariable;
Proměnné mají místní obor a jsou viditelné pouze v dávce nebo postupu, kde je definujete. V následujícím příkladu nemá vnořený obor vytvořený pro spuštění sp_executesql proměnné deklarovanou ve vyšším oboru přístup a vrátí chybu.
DECLARE @MyVariable AS INT;
SET @MyVariable = 1;
EXECUTE sp_executesql N'SELECT @MyVariable';
Tento dotaz vytvoří následující chybu:
Msg 137, Level 15, State 2, Line 1
Must declare the scalar variable "@MyVariable".
Nastavení hodnoty v proměnné Transact-SQL
Když poprvé deklarujete proměnnou, její hodnota je NULL. K přiřazení hodnoty proměnné použijte SET příkaz. Tato metoda je upřednostňovaným způsobem přiřazení hodnoty proměnné. Hodnotu můžete k proměnné přiřadit také tak, že na ni odkazujete v seznamu select příkazu SELECT .
Pokud chcete proměnné přiřadit hodnotu pomocí SET příkazu, zadejte název proměnné a hodnotu, kterou chcete proměnné přiřadit. Tato metoda je upřednostňovaným způsobem přiřazení hodnoty proměnné. Následující dávka například deklaruje dvě proměnné, přiřadí jim hodnoty a pak je použije v WHERE klauzuli SELECT příkazu:
USE AdventureWorks2025;
GO
-- Declare two variables.
DECLARE @FirstNameVariable AS NVARCHAR (50),
@PostalCodeVariable AS 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,
PostalCode,
StateProvinceName,
CountryRegionName
FROM HumanResources.vEmployee
WHERE FirstName = @FirstNameVariable
OR PostalCode = @PostalCodeVariable;
Hodnotu můžete k proměnné přiřadit také tak, že na ni odkazujete v seznamu výběru. Pokud odkazujete na proměnnou v seznamu select, přiřaďte ji skalární hodnotu nebo zajistěte, aby SELECT příkaz vrátil pouze jeden řádek. Například:
USE AdventureWorks2025;
GO
DECLARE @EmpIDVariable AS INT;
SELECT @EmpIDVariable = MAX(BusinessEntityID)
FROM HumanResources.Employee;
Warning
Pokud v jednom SELECT příkazu existuje více klauzulí přiřazení, databázový stroj nezaručuje pořadí vyhodnocení výrazů. Efekty jsou viditelné pouze v případě, že mezi přiřazeními existují odkazy.
SELECT Pokud příkaz vrátí více než jeden řádek a proměnná odkazuje na nekalarní výraz, proměnná se nastaví na hodnotu vrácenou pro výraz v posledním řádku sady výsledků. Například v následující dávce @EmpIDVariable je nastavena hodnota BusinessEntityID posledního vráceného řádku, což je 1:
USE AdventureWorks2025;
GO
DECLARE @EmpIDVariable AS INT;
SELECT @EmpIDVariable = BusinessEntityID
FROM HumanResources.Employee
ORDER BY BusinessEntityID DESC;
SELECT @EmpIDVariable;
Examples
Následující skript vytvoří malou testovací tabulku a naplní ji 26 řádky. Skript používá proměnnou ke třem věcem:
- Určuje, kolik řádků se vloží, a to tak, že určuje, kolikrát se smyčka spustí.
- Zadejte hodnotu vloženou do celočíselného sloupce.
- Funkce jako součást výrazu, který generuje písmena pro vložení do sloupce znaků.
-- Create the table.
CREATE TABLE TestTable
(
cola INT,
colb CHAR (3)
);
SET NOCOUNT ON;
-- Declare the variable to be used.
DECLARE @MyCounter AS INT;
-- Initialize the variable.
SET @MyCounter = 0;
-- Test the variable to see if the loop is finished.
WHILE (@MyCounter < 26)
-- Insert a row into the table.
BEGIN
INSERT INTO TestTable
-- 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'.
VALUES (
@MyCounter,
CHAR((@MyCounter + ASCII('a')))
);
-- Increment the variable to count this iteration
-- of the loop.
SET @MyCounter = @MyCounter + 1;
END
SET NOCOUNT OFF;
-- View the data.
SELECT cola,
colb
FROM TestTable;
DROP TABLE TestTable;