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
SQL Analytics-eindpunt in Microsoft Fabric
Magazijn in Microsoft Fabric
SQL-database in Microsoft Fabric
Hiermee stelt u een lokale variabele in op de waarde van een expressie.
Gebruik voor het toewijzen van variabelen SET @local_variable in plaats van SELECT @local_variable.
Transact-SQL syntaxis-conventies
Syntax
SELECT { @local_variable { = | += | -= | *= | /= | %= | &= | ^= | |= } expression }
[ , ...n ] [ ; ]
Arguments
@local_variable
Een gedeclareerde variabele waarvoor u een waarde toewijst.
{ = | += | -= | *= | /= | %= | &= | ^= | |=}
Wijs de waarde aan de rechterkant toe aan de variabele aan de linkerkant.
Operator voor samengestelde toewijzing:
| Operator | Action |
|---|---|
| = | Hiermee wijst u de volgende expressie toe aan de variabele. |
| += | Toevoegen en toewijzen |
| -= | Aftrekken en toewijzen |
| *= | Vermenigvuldigen en toewijzen |
| /= | Delen en toewijzen |
| %= | Modulo en toewijzen |
| &= | Bitsgewijs AND toewijzen en toewijzen |
| ^= | Bitsgewijs XOR toewijzen en toewijzen |
| |= | Bitsgewijs OR toewijzen en toewijzen |
expression
Elke geldige expressie. Deze term bevat een scalaire subquery.
Remarks
Gebruik SELECT @local_variable dit om één waarde in de variabele te retourneren. Wanneer de expressie echter de naam van een kolom is, kan deze meerdere waarden retourneren. Als de SELECT instructie meer dan één waarde retourneert, krijgt de variabele de laatste waarde die door de query wordt geretourneerd.
Als de SELECT instructie geen rijen retourneert, behoudt de variabele de huidige waarde. Als de expressie een scalaire subquery is die geen waarde retourneert, wordt de variabele ingesteld op NULL.
Eén SELECT instructie kan meerdere lokale variabelen initialiseren.
Note
U kunt geen instructie gebruiken SELECT die een variabeletoewijzing bevat om ook typische bewerkingen voor het ophalen van resultatensets uit te voeren.
Examples
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 .
De AdventureWorksLT database wordt gebruikt als voorbeelddatabase voor Azure SQL Database.
A. SELECT @local_variable gebruiken om één waarde te retourneren
In het volgende voorbeeld haalt de variabele @var1 de waarde 'Generic Name'op. De query voor de Store tabel retourneert geen rijen omdat de opgegeven CustomerID waarde niet in de tabel bestaat. De variabele behoudt de waarde 'Algemene naam'.
DECLARE @var1 AS VARCHAR (30);
SELECT @var1 = 'Generic Name';
SELECT @var1 = [Name]
FROM SalesLT.Product
WHERE ProductID = 1000000;
SELECT @var1 AS 'ProductName';
Hier is het resultatenoverzicht.
ProductName
------------------------------
Generic Name
B. SELECT @local_variable gebruiken om null te retourneren
In het volgende voorbeeld wijst een subquery een waarde toe aan @var1. Omdat de aangevraagde CustomerID waarde niet bestaat, retourneert de subquery geen waarde en wordt de variabele ingesteld op NULL.
DECLARE @var1 AS VARCHAR (30);
SELECT @var1 = 'Generic Name';
SELECT @var1 = (SELECT [Name]
FROM SalesLT.Product
WHERE ProductID = 1000000);
SELECT @var1 AS 'Company Name';
Hier is het resultatenoverzicht.
Company Name
----------------------------
NULL
C. Antipatroon van recursieve variabeletoewijzing
Vermijd het volgende patroon voor recursief gebruik van variabelen en expressies:
SELECT @Var = <expression containing @Var>
FROM
...
In dit geval is het niet gegarandeerd dat @Var deze op rijbasis wordt bijgewerkt. Kan bijvoorbeeld @Var worden ingesteld op de initiële waarde voor @Var alle rijen. Dit gedrag treedt op omdat de volgorde en frequentie waarin de toewijzingen worden verwerkt, niet-determinant zijn. Deze regel is van toepassing op expressies die tekenreekssamenvoeging van variabelen bevatten, zoals wordt weergegeven in het volgende voorbeeld, maar ook op expressies met niet-tekenreeksvariabelen of += stijloperators. Gebruik in plaats daarvan aggregatiefuncties voor een bewerking op basis van een set in plaats van een rij-per-rijbewerking.
Houd bij tekenreekssamenvoeging rekening met de functie STRING_AGG, geïntroduceerd in SQL Server 2017 (14.x), voor scenario's waarin geordende tekenreekssamenvoeging gewenst is. Zie STRING_AGG voor meer informatie.
In het volgende voorbeeld ziet u een antipatroon om te voorkomen. Als ORDER BY u probeert samenvoeging te bestellen, is de lijst onvolledig:
DECLARE @List AS NVARCHAR (MAX);
SELECT @List = CONCAT(COALESCE (@List + ', ', ''), p.LastName)
FROM Person.Person AS p
WHERE p.FirstName = 'William'
ORDER BY p.BusinessEntityID;
SELECT @List;
Hier is het resultatenoverzicht.
(No column name)
---
Walker
Overweeg in plaats daarvan:
DECLARE @List AS NVARCHAR (MAX);
SELECT @List = STRING_AGG(p.LastName, ', ') WITHIN GROUP (ORDER BY p.BusinessEntityID)
FROM Person.Person AS p
WHERE p.FirstName = 'William';
SELECT @List;
Hier is het resultatenoverzicht.
(No column name)
---
Vong, Conner, Hapke, Monroe, Richter, Sotelo, Vong, Ngoh, White, Harris, Martin, Thompson, Martinez, Robinson, Clark, Rodriguez, Smith, Johnson, Williams, Jones, Brown, Davis, Miller, Moore, Taylor, Anderson, Thomas, Lewis, Lee, Walker