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
Een Transact-SQL lokale variabele is een object dat één gegevenswaarde van een specifiek type kan bevatten. Doorgaans gebruikt u variabelen in batches en scripts voor de volgende doeleinden:
- Gebruik een variabele als teller om het aantal keren te tellen dat een lus wordt uitgevoerd of om te bepalen hoe vaak de lus wordt uitgevoerd.
- Bewaar een gegevenswaarde om te testen met een controle-of-stroom-instructie.
- Sla een gegevenswaarde op die moet worden geretourneerd door een opgeslagen procedure retourcode of functie-retourwaarde.
De codevoorbeelden in dit artikel gebruiken de AdventureWorks2025 of AdventureWorksDW2025 voorbeelddatabase die u kunt downloaden van de startpagina van Microsoft SQL Server Samples en Community Projects .
Remarks
De namen van sommige Transact-SQL systeemfuncties beginnen met twee bijtekens (@@). Hoewel eerdere versies van SQL Server verwijzen naar de @@ functies als globale variabelen, @@ 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
Gebruik de DECLARE instructie om een Transact-SQL variabele te initialiseren door:
Een naam toewijzen. De naam moet beginnen met één
@teken.Het toewijzen van een door het systeem opgegeven of door de gebruiker gedefinieerd gegevenstype en een lengte. Voor numerieke variabelen kunt u een precisie en optionele schaal toewijzen. Voor variabelen van het type XML kunt u desgewenst een schemaverzameling toewijzen.
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 AS INT;
Als u meer dan één lokale variabele wilt declareren, gebruikt u een komma na de eerste lokale variabeledefinitie 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 @LastName, @FirstNameen , en @StateProvinceworden ze geïnitialiseerd tot NULL:
DECLARE @LastName AS NVARCHAR (30),
@FirstName AS NVARCHAR (20),
@StateProvince AS 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 AS BIT = 0;
Variabele 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 AdventureWorks2025;
GO
DECLARE @MyVariable AS INT;
SET @MyVariable = 1;
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 u ze definieert. In het volgende voorbeeld heeft het geneste bereik dat is gemaakt voor uitvoering sp_executesql , geen toegang tot de variabele die in het hogere bereik is gedeclareerd en wordt een fout geretourneerd.
DECLARE @MyVariable AS INT;
SET @MyVariable = 1;
EXECUTE sp_executesql N'SELECT @MyVariable';
Deze query produceert de volgende fout:
Msg 137, Level 15, State 2, Line 1
Must declare the scalar variable "@MyVariable".
Een waarde instellen in een Transact-SQL variabele
Wanneer u een variabele voor het eerst declareert, is de waarde .NULL Als u een waarde wilt toewijzen aan een variabele, gebruikt u de SET instructie. Deze methode is de voorkeursmethode om een waarde toe te wijzen aan een variabele. U kunt ook een waarde aan een variabele toewijzen door ernaar te verwijzen 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. Deze methode is de voorkeursmethode om een waarde toe te wijzen 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 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;
U kunt ook een waarde aan een variabele toewijzen door ernaar te verwijzen in een selectielijst. Als u verwijst naar een variabele in een selectielijst, wijst u deze een scalaire waarde toe of zorgt u ervoor dat de SELECT instructie slechts één rij retourneert. Voorbeeld:
USE AdventureWorks2025;
GO
DECLARE @EmpIDVariable AS INT;
SELECT @EmpIDVariable = MAX(BusinessEntityID)
FROM HumanResources.Employee;
Warning
Als er meerdere toewijzingsclausules in één SELECT instructie staan, garandeert de database-engine 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 AdventureWorks2025;
GO
DECLARE @EmpIDVariable AS INT;
SELECT @EmpIDVariable = BusinessEntityID
FROM HumanResources.Employee
ORDER BY BusinessEntityID DESC;
SELECT @EmpIDVariable;
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)
);
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;