Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
SQL Analytics-eindpunt in Microsoft Fabric
Magazijn in Microsoft Fabric
SQL-database in Microsoft Fabric Preview
Een Transact-SQL lokale variabele is een object dat één gegevenswaarde van een specifiek type kan bevatten. Variabelen in batches en scripts worden doorgaans gebruikt:
- Als teller om het aantal keren te tellen dat een lus wordt uitgevoerd of om te bepalen hoe vaak de lus wordt uitgevoerd.
- Als u een gegevenswaarde wilt opslaan die moet worden getest met een controle-van-stroom-instructie.
- Als u een gegevenswaarde wilt opslaan die moet worden geretourneerd door een opgeslagen procedure retourcode of functie retourwaarde.
Remarks
De namen van sommige Transact-SQL systeemfuncties beginnen met twee bijtekens (@@). Hoewel in eerdere versies van SQL Server de @@ functies globale variabelen worden genoemd, @@ zijn functies geen variabelen en hebben ze niet hetzelfde gedrag als variabelen. De @@ functies zijn systeemfuncties en hun syntaxisgebruik volgt de regels voor functies.
U kunt geen variabelen in een weergave gebruiken.
Wijzigingen in variabelen worden niet beïnvloed door het terugdraaien van een transactie.
Een Transact-SQL-variabele declareren
Met de DECLARE instructie wordt een Transact-SQL variabele geïnitialiseerd op:
Een naam toewijzen. De naam moet één als
@eerste teken hebben.Het toewijzen van een door het systeem opgegeven of door de gebruiker gedefinieerd gegevenstype en een lengte. Voor numerieke variabelen worden ook een precisie en schaal toegewezen. Voor variabelen van het type XML kan een optionele schemaverzameling worden toegewezen.
Stel de waarde in op
NULL.
Met de volgende DECLARE instructie maakt u bijvoorbeeld een lokale variabele met de naam @mycounter met een gegevenstype int . De waarde voor deze variabele is NULLstandaard .
DECLARE @MyCounter INT;
Als u meer dan één lokale variabele wilt declareren, gebruikt u een komma na de eerste gedefinieerde lokale variabele en geeft u vervolgens de naam en het gegevenstype van de volgende lokale variabele op.
Met de volgende DECLARE instructie worden bijvoorbeeld drie lokale variabelen gemaakt met de naam @LastNameen @StateProvince@FirstName , en worden ze geïnitialiseerd totNULL:
DECLARE @LastName NVARCHAR(30), @FirstName NVARCHAR(20), @StateProvince NCHAR(2);
In een ander voorbeeld maakt de volgende DECLARE instructie een Booleaanse variabele met de naam @IsActive, die wordt gedeclareerd als bit met de waarde (0false):
DECLARE @IsActive BIT = 0;
Variable scope
Het bereik van een variabele is het bereik van Transact-SQL instructies die naar de variabele kunnen verwijzen. Het bereik van een variabele duurt vanaf het punt dat deze wordt gedeclareerd tot het einde van de batch of opgeslagen procedure waarin deze wordt gedeclareerd. Met het volgende script wordt bijvoorbeeld een syntaxisfout gegenereerd omdat de variabele wordt gedeclareerd in één batch (gescheiden door het GO trefwoord) en waarnaar wordt verwezen in een andere:
USE AdventureWorks2022;
GO
DECLARE @MyVariable INT;
SET @MyVariable = 1;
GO
SELECT BusinessEntityID,
NationalIDNumber,
JobTitle
FROM HumanResources.Employee
WHERE BusinessEntityID = @MyVariable;
Variabelen hebben een lokaal bereik en zijn alleen zichtbaar in de batch of procedure waarin ze zijn gedefinieerd. In het volgende voorbeeld heeft het geneste bereik dat is gemaakt voor uitvoering, sp_executesql geen toegang tot de variabele die is gedeclareerd in het hogere bereik en retourneert en fout.
DECLARE @MyVariable INT;
SET @MyVariable = 1;
EXECUTE sp_executesql N'SELECT @MyVariable'; -- this produces an error
Een waarde instellen in een Transact-SQL variabele
Wanneer een variabele voor het eerst wordt gedeclareerd, wordt de waarde ervan ingesteld op NULL. Als u een waarde wilt toewijzen aan een variabele, gebruikt u de SET instructie. Dit is de voorkeursmethode voor het toewijzen van een waarde aan een variabele. Aan een variabele kan ook een waarde worden toegewezen door te worden verwezen in de selectielijst van een SELECT instructie.
Als u een variabele een waarde wilt toewijzen met behulp van de SET-instructie, neemt u de naam van de variabele en de waarde op die u aan de variabele wilt toewijzen. Dit is de voorkeursmethode voor het toewijzen van een waarde aan een variabele. De volgende batch declareert bijvoorbeeld twee variabelen, wijst er waarden aan toe en gebruikt deze vervolgens in de WHERE component van een SELECT instructie:
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
Aan een variabele kan ook een waarde worden toegewezen door te worden verwezen in een selectielijst. Als in een selectielijst naar een variabele wordt verwezen, moet er een scalaire waarde aan worden toegewezen of mag de SELECT instructie slechts één rij retourneren. For example:
USE AdventureWorks2022;
GO
DECLARE @EmpIDVariable INT;
SELECT @EmpIDVariable = MAX(EmployeeID)
FROM HumanResources.Employee;
GO
Warning
Als er meerdere toewijzingsclausules in één SELECT instructie staan, garandeert SQL Server niet de volgorde van evaluatie van de expressies. Effecten zijn alleen zichtbaar als er verwijzingen zijn tussen de toewijzingen.
Als een SELECT instructie meer dan één rij retourneert en de variabele verwijst naar een niet-calaire expressie, wordt de variabele ingesteld op de waarde die wordt geretourneerd voor de expressie in de laatste rij van de resultatenset. In de volgende batch @EmpIDVariable wordt bijvoorbeeld ingesteld op de waarde van de BusinessEntityID laatste rij die wordt geretourneerd. Dit is 1:
USE AdventureWorks2022;
GO
DECLARE @EmpIDVariable INT;
SELECT @EmpIDVariable = BusinessEntityID
FROM HumanResources.Employee
ORDER BY BusinessEntityID DESC;
SELECT @EmpIDVariable;
GO
Examples
Met het volgende script wordt een kleine testtabel gemaakt en gevuld met 26 rijen. In het script wordt een variabele gebruikt om drie dingen uit te voeren:
- Bepaal hoeveel rijen worden ingevoegd door te bepalen hoe vaak de lus wordt uitgevoerd.
- Geef de waarde op die in de kolom geheel getal is ingevoegd.
- Functie als onderdeel van de expressie waarmee letters worden gegenereerd die in de tekenkolom moeten worden ingevoegd.
-- 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