Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:SQL Server
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Azure Synapse Analytics
Microsoft Fabric'te
SQL analitiği uç noktasıMicrosoft Fabric'te
DepoMicrosoft Fabric'te SQL veritabanı
Bir ifadenin değerine yerel değişken ayarlar.
Değişkenleri atamak için yerine SELECT @local_variablekullanınSET @local_variable.
Transact-SQL söz dizimi kuralları
Syntax
SELECT { @local_variable { = | += | -= | *= | /= | %= | &= | ^= | |= } expression }
[ , ...n ] [ ; ]
Arguments
@local_variable
Değer atadığınız bildirilen değişken.
{ = | += | -= | *= | /= | %= | &= | ^= | |=}
Sağdaki değeri soldaki değişkene atayın.
Bileşik atama işleci:
| Operator | Action |
|---|---|
| = | Aşağıdaki ifadeyi değişkenine atar. |
| += | Ekleme ve atama |
| -= | Çıkarma ve atama |
| *= | Çarpma ve atama |
| /= | Bölme ve atama |
| %= | Modulo ve atama |
| &= | Bit düzeyinde AND ve atama |
| ^= | Bit düzeyinde XOR ve atama |
| |= | Bit düzeyinde OR ve atama |
expression
Herhangi bir geçerli ifade. Bu terim bir skaler alt sorgu içerir.
Remarks
değişkenine tek bir değer döndürmek için kullanın SELECT @local_variable . Ancak ifade bir sütunun adı olduğunda birden çok değer döndürebilir.
SELECT Deyimi birden fazla değer döndürürse, değişken sorgunun döndürdüğü son değeri alır.
SELECT deyimi satır döndürmezse değişken geçerli değerini korur.
İfade değer döndürmeden skaler bir alt sorguysa, değişkeni olarak NULLayarlanır.
Bir SELECT deyim birden çok yerel değişken başlatabilir.
Note
Tipik sonuç kümesi alma işlemlerini gerçekleştirmek için değişken ataması içeren bir deyimi kullanamazsınız SELECT .
Examples
Bu makaledeki kod örnekleri, AdventureWorks2025 giriş sayfasından indirebileceğiniz AdventureWorksDW2025 veya örnek veritabanını kullanır.
Veritabanı AdventureWorksLT , Azure SQL Veritabanı için örnek veritabanı olarak kullanılır.
A. Tek bir değer döndürmek için SELECT @local_variable kullanma
Aşağıdaki örnekte değişkeni @var1 değerini 'Generic Name'alır. için belirtilen değer tabloda bulunmadığındanStore, tabloya yönelik sorgu CustomerID satır döndürmez. değişkeni "Genel Ad" değerini tutar.
DECLARE @var1 AS VARCHAR (30);
SELECT @var1 = 'Generic Name';
SELECT @var1 = [Name]
FROM SalesLT.Product
WHERE ProductID = 1000000;
SELECT @var1 AS 'ProductName';
Sonuç kümesi aşağıdadır.
ProductName
------------------------------
Generic Name
B. Null döndürmek için SELECT @local_variable kullanma
Aşağıdaki örnekte, bir alt sorgu öğesine @var1bir değer atar. için CustomerID istenen değer mevcut olmadığından, alt sorgu değer döndürmez ve değişkeni olarak NULLayarlanır.
DECLARE @var1 AS VARCHAR (30);
SELECT @var1 = 'Generic Name';
SELECT @var1 = (SELECT [Name]
FROM SalesLT.Product
WHERE ProductID = 1000000);
SELECT @var1 AS 'Company Name';
Sonuç kümesi aşağıdadır.
Company Name
----------------------------
NULL
C. Özyinelemeli değişken atamasının kötü amaçlı kullanımı
Değişkenlerin ve ifadelerin özyinelemeli kullanımı için aşağıdaki desenden kaçının:
SELECT @Var = <expression containing @Var>
FROM
...
Bu durumda, satır temelinde güncelleştirildiği @Var garanti değildir. Örneğin, @Var tüm satırlar için başlangıç değerine @Var ayarlanabilir. Atamaların işlenme sırası ve sıklığı belirsiz olduğundan bu davranış oluşur. Bu kural, aşağıdaki örnekte gösterildiği gibi değişken dize birleştirmesi içeren ifadeler için, aynı zamanda dize olmayan değişkenlere veya += stil işleçlerine sahip ifadeler için de geçerlidir. Satır satır işlem yerine küme tabanlı bir işlem için toplama işlevlerini kullanın.
Dize birleştirme için, sıralı dize birleştirmenin istendiği senaryolar için SQL Server 2017'de (14.x) tanıtılan STRING_AGG işlevini göz önünde bulundurun. Daha fazla bilgi için bkz. STRING_AGG.
Aşağıdaki örnekte kaçınılması gereken bir kötü model gösterilmektedir.
ORDER BY Birleştirmeyi sıralama girişiminde kullanmak listenin tamamlanmamış olmasını neden olur:
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;
Sonuç kümesi aşağıdadır.
(No column name)
---
Walker
Bunun yerine, şunu düşünün:
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;
Sonuç kümesi aşağıdadır.
(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