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é v dávkách a skriptech se obvykle používají:
- Jako čítač buď spočítá, kolikrát se smyčka provádí, nebo k řízení, kolikrát se smyčka provádí.
- Pokud chcete uchovávat hodnotu dat, která se má testovat příkazem control-of-flow.
- Chcete-li uložit datovou hodnotu vrácenou uloženou procedurou, vrátí kód nebo návratovou hodnotu funkce.
Remarks
Názvy některých systémových funkcí Transact-SQL začínají dvěma písmeny (@@). I když v dřívějších verzích SQL Serveru @@ se funkce označují 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
Příkaz DECLARE inicializuje Transact-SQL proměnnou pomocí:
Přiřazení názvu Název musí mít jeden
@znak jako první znak.Přiřazení systémového nebo uživatelem definovaného datového typu a délky Pro číselné proměnné jsou také přiřazeny přesnost a měřítko. Pro proměnné typu XML může být přiřazena volitelná kolekce 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 INT;
Chcete-li deklarovat více než jednu místní proměnnou, použijte čárku za první definovanou místní proměnnou a potom zadejte další název místní proměnné a datový typ.
Například následující DECLARE příkaz vytvoří tři místní proměnné pojmenované @LastName@FirstName a @StateProvinceinicializuje každý z těchto proměnných:NULL
DECLARE @LastName NVARCHAR(30), @FirstName NVARCHAR(20), @StateProvince 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 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 AdventureWorks2022;
GO
DECLARE @MyVariable INT;
SET @MyVariable = 1;
GO
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 jsou definované. V následujícím příkladu nemá vnořený obor vytvořený pro spuštění sp_executesql proměnné deklarovaný ve vyšším oboru přístup a vrací a chyba.
DECLARE @MyVariable INT;
SET @MyVariable = 1;
EXECUTE sp_executesql N'SELECT @MyVariable'; -- this produces an error
Nastavení hodnoty v proměnné Transact-SQL
Když je proměnná poprvé deklarována, její hodnota je nastavena na NULL. K přiřazení hodnoty proměnné použijte SET příkaz. Toto je upřednostňovaná metoda přiřazení hodnoty proměnné. Proměnná může mít také přiřazenou hodnotu odkazováním v seznamu výběrových SELECT příkazů.
Pokud chcete přiřadit proměnnou hodnotu pomocí příkazu SET, zadejte název proměnné a hodnotu, kterou chcete proměnné přiřadit. Toto je upřednostňovaná metoda 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 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
Proměnná může mít také přiřazenou hodnotu odkazováním v seznamu výběru. Pokud je proměnná odkazována v seznamu select, měla by být přiřazena skalární hodnota nebo SELECT příkaz by měl vracet pouze jeden řádek. Například:
USE AdventureWorks2022;
GO
DECLARE @EmpIDVariable INT;
SELECT @EmpIDVariable = MAX(EmployeeID)
FROM HumanResources.Employee;
GO
Warning
Pokud v jednom SELECT příkazu existuje více klauzulí přiřazení, SQL Server 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 AdventureWorks2022;
GO
DECLARE @EmpIDVariable INT;
SELECT @EmpIDVariable = BusinessEntityID
FROM HumanResources.Employee
ORDER BY BusinessEntityID DESC;
SELECT @EmpIDVariable;
GO
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, která se mají vložit do sloupce znaků.
-- 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