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 Preview
Hiermee stelt u een lokale variabele in op de waarde van een expressie.
Voor het toewijzen van variabelen wordt u aangeraden in plaats van SELECT @local_variable te gebruikenSET @local_variable.
Transact-SQL syntaxis-conventies
Syntax
SELECT { @local_variable { = | += | -= | *= | /= | %= | &= | ^= | |= } expression }
[ ,...n ] [ ; ]
Arguments
@ local_variable
Een gedeclareerde variabele waaraan een waarde moet worden toegewezen.
{ =|=^= | | | &=%= | /= | | | *= | +=-=}
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 EN toewijzen en toewijzen |
| ^= | Bitwise XOR en toewijzen |
| |= | Bitsgewijze OR en toewijzen |
expression
Elke geldige expressie. Dit omvat een scalaire subquery.
Remarks
SELECT @local_variable wordt meestal gebruikt 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, wordt aan de variabele de laatste waarde toegewezen die 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.
Met één SELECT-instructie kunnen meerdere lokale variabelen worden geïnitialiseerd.
Note
Een SELECT-instructie die een variabeletoewijzing bevat, kan niet worden gebruikt om ook typische bewerkingen voor het ophalen van resultatensets uit te voeren.
Examples
A. SELECT @local_variable gebruiken om één waarde te retourneren
In het volgende voorbeeld wordt aan de variabele @var1 'Algemene naam' toegewezen als waarde. 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'.
In dit voorbeeld wordt de AdventureWorksLT voorbeelddatabase gebruikt. Zie AdventureWorks-voorbeelddatabases voor meer informatie. De AdventureWorksLT database wordt gebruikt als voorbeelddatabase voor Azure SQL Database.
-- Uses AdventureWorks2022LT
DECLARE @var1 VARCHAR(30);
SELECT @var1 = 'Generic Name';
SELECT @var1 = [Name]
FROM SalesLT.Product
WHERE ProductID = 1000000; --Value does not exist
SELECT @var1 AS 'ProductName';
Hier is het resultatenoverzicht.
ProductName
------------------------------
Generic Name
B. SELECT @local_variable gebruiken om null te retourneren
In het volgende voorbeeld wordt een subquery gebruikt om een waarde toe te wijzen aan @var1. Omdat de aangevraagde CustomerID waarde niet bestaat, retourneert de subquery geen waarde en wordt de variabele ingesteld op NULL.
In dit voorbeeld wordt de AdventureWorksLT voorbeelddatabase gebruikt. Zie AdventureWorks-voorbeelddatabases voor meer informatie. De AdventureWorksLT database wordt gebruikt als voorbeelddatabase voor Azure SQL Database.
-- Uses AdventureWorksLT
DECLARE @var1 VARCHAR(30);
SELECT @var1 = 'Generic Name';
SELECT @var1 = (SELECT [Name]
FROM SalesLT.Product
WHERE ProductID = 1000000); --Value does not exist
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 deze @Var op rijbasis wordt bijgewerkt. Kan bijvoorbeeld @Var worden ingesteld op de initiële waarde voor @Var alle rijen. Dit komt doordat de volgorde en frequentie waarin de toewijzingen worden verwerkt, niet-determinant zijn. Dit geldt voor expressies die tekenreekssamenvoeging van variabelen bevatten, zoals hieronder wordt weergegeven, maar ook voor 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.
Voor tekenreekssamenvoeging kunt u in plaats daarvan de STRING_AGG functie overwegen die is geïntroduceerd in SQL Server 2017 (14.x), voor scenario's waarin geordende tekenreekssamenvoeging gewenst is. Zie STRING_AGG (Transact-SQL) voor meer informatie.
De codevoorbeelden in dit artikel gebruiken de AdventureWorks2022 of AdventureWorksDW2022 voorbeelddatabase die u kunt downloaden van de startpagina van Microsoft SQL Server Samples en Community Projects .
Een voorbeeld om te voorkomen, waarbij het gebruik van ORDER BY in poging om samenvoeging te bestellen ervoor zorgt dat de lijst onvolledig is:
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;
Result set:
(No column name)
---
Walker
Instead, consider:
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;
Result set:
(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
See also
- DECLARE @local_variable (Transact-SQL)
- Expressions (Transact-SQL)
- Samengestelde operators (Transact-SQL)
- SELECT (Transact-SQL)