Aracılığıyla paylaş


SELECT @local_variable (Transact-SQL)

Şunlar için geçerlidir:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsMicrosoft 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 SELECT @SET @local_variable yerine kullanmanızı öneririz.

Transact-SQL söz dizimi kuralları

Syntax

SELECT { @local_variable { = | += | -= | *= | /= | %= | &= | ^= | |= } expression }
    [ ,...n ] [ ; ]

Arguments

@ local_variable

Bir değerin atanacağı 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. Buna skaler alt sorgu dahildir.

Remarks

SELECT @local_variable genellikle değişkene tek bir değer döndürmek için kullanılır. 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şkene döndürülen son değer atanır.

SELECT deyimi satır döndürmezse, değişken bugünkü değerini korur. İfade değer döndürmeden skaler bir alt sorguysa, değişken NULL olarak ayarlanır.

Bir SELECT deyimi birden çok yerel değişkeni başlatabilir.

Note

Değişken ataması içeren bir SELECT deyimi, tipik sonuç kümesi alma işlemlerini gerçekleştirmek için de kullanılamaz.

Examples

A. Tek bir değer döndürmek için SELECT @local_variable kullanma

Aşağıdaki örnekte değişkenine @var1 değeri olarak "Genel Ad" atanı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 korur.

Bu örnekte örnek veritabanı kullanılmıştır AdventureWorksLT . Daha fazla bilgi için bkz. AdventureWorks örnek veritabanları. Veritabanı AdventureWorksLT , Azure SQL Veritabanı için örnek veritabanı olarak kullanılır.

-- 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';

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, öğesine bir değer @var1atamak için bir alt sorgu kullanılır. için CustomerID istenen değer mevcut olmadığından, alt sorgu değer döndürmez ve değişkeni olarak NULLayarlanır.

Bu örnekte örnek veritabanı kullanılmıştır AdventureWorksLT . Daha fazla bilgi için bkz. AdventureWorks örnek veritabanları. Veritabanı AdventureWorksLT , Azure SQL Veritabanı için örnek veritabanı olarak kullanılır.

-- 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';

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ştirileceği @Var garanti değildir. Örneğin, @Var tüm satırlar için başlangıç değerine @Var ayarlanabilir. Bunun nedeni, atamaların işlenme sırasının ve sıklığının belirsiz olmamasıdır. Bu, aşağıda 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 STRING_AGG istendiği senaryolar için SQL Server 2017'de (14.x) tanıtılan işlevi göz önünde bulundurun. Daha fazla bilgi için bkz. STRING_AGG (Transact-SQL).

Bu makaledeki kod örnekleri, AdventureWorks2025 giriş sayfasından indirebileceğiniz AdventureWorksDW2025 veya örnek veritabanını kullanır.

Order BY'ın birleştirmeyi sıralamaya çalışırken kullanılmasının listenin tamamlanmamış olması durumunda kaçınılması gereken bir örnek:

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ç seti:

(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ç seti:

(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

Ayrıca bakınız

Sonraki Adımlar