Aracılığıyla paylaş


SET @local_variable (Transact-SQL)

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiAzure Synapse AnalyticsAnaliz Platformu Sistemi (PDW)Microsoft Fabric'teki SQL analiz uç noktasıMicrosoft Fabric'teki ambarMicrosoft Fabric'teki SQL veritabanı

Daha önce deyimi kullanılarak DECLARE @local_variable oluşturulan belirtilen yerel değişkeni belirtilen değere ayarlar.

Transact-SQL söz dizimi kuralları

Syntax

SQL Server, Azure SQL Veritabanı ve Azure SQL Yönetilen Örneği söz dizimi:

SET
{ @local_variable
    [ . { property_name | field_name } ] = { expression | udt_name { . | :: } method_name }
}
| { @SQLCLR_local_variable.mutator_method }
| { @local_variable
    { += | -= | *= | /= | %= | &= | ^= | |= } expression
}
| { @cursor_variable =
    { @cursor_variable | cursor_name
    | { CURSOR [ [ LOCAL | GLOBAL ] ]
        [ FORWARD_ONLY | SCROLL ]
        [ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ]
        [ READ_ONLY | SCROLL_LOCKS | OPTIMISTIC ]
        [ TYPE_WARNING ]
    FOR select_statement
        [ FOR { READ ONLY | UPDATE [ OF column_name [ , ...n ] ] } ]
      }
    }
}

Azure Synapse Analytics ve Paralel Veri Ambarı ve Microsoft Fabric söz dizimi:

SET @local_variable { = | += | -= | *= | /= | %= | &= | ^= | |= } expression

Arguments

@local_variable

İmleç, metin, ntext, resim veya tablo dışında herhangi bir türde değişkenin adı. Değişken adları, işaretinde (@ ile başlamalıdır). Değişken adları , tanımlayıcılar için kurallara uymalıdır.

property_name

Kullanıcı tanımlı türün özelliği.

field_name

Kullanıcı tanımlı türde bir ortak alan.

udt_name

Ortak dil çalışma zamanı (CLR) kullanıcı tanımlı türünün adı.

{ . | :: }

CLR kullanıcı tanımlama türünün yöntemini belirtir. Bir örnek (statik olmayan) yöntemi için nokta (.) kullanın. Statik bir yöntem için iki iki nokta üst üste (::) kullanın. CLR kullanıcı tanımlı türünün yöntemini, özelliğini veya alanını çağırmak için, tür üzerinde EXECUTE izniniz olmalıdır.

method_name ( bağımsız değişken [ ,... n ] )

Bir tür örneğinin durumunu değiştirmek için bir veya daha fazla bağımsız değişken alan kullanıcı tanımlı bir tür yöntemi. Statik yöntemler genel olmalıdır.

@SQLCLR_local_variable

Türü bir derlemede bulunan bir değişken. Daha fazla bilgi için bkz. Ortak dil çalışma zamanı (CLR) tümleştirme programlama kavramları.

mutator_method

Derlemede nesnenin durumunu değiştirebilen bir yöntem. SQLMethodAttribute.IsMutator bu yönteme uygulanır.

{ += | -= | *= | /= | %= | &= | ^= | |= }

Bileşik atama işleci:

  • += - 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.

cursor_variable

İmleç değişkeninin adı. Hedef imleç değişkeni daha önce farklı bir imleç başvurusunda bulunduysa, önceki başvuru kaldırılır.

cursor_name

deyimi kullanılarak bildirilen bir imlecin DECLARE CURSOR adı.

İMLEÇ

deyiminin SET bir imleç bildirimi içerdiğini belirtir.

TOMAR

İmlecin tüm getirme seçeneklerini desteklediğini belirtir: FIRST, LAST, NEXT, PRIOR, RELATIVE, ve ABSOLUTE. öğesini de belirttiğinizde SCROLL belirtemezsiniz FAST_FORWARD.

FORWARD_ONLY

İmlecin yalnızca seçeneği desteklediğini FETCH NEXT belirtir. İmleç, ilk satırdan son satıra kadar yalnızca bir yönde alınır. , veya FORWARD_ONLYSTATIC anahtar sözcükleri olmadan KEYSETbelirttiğinizdeDYNAMIC, imleç olarak DYNAMICuygulanır. veya FORWARD_ONLYSCROLLbelirtmezsenizFORWARD_ONLY, , STATICveya KEYSETanahtar sözcüklerini DYNAMICbelirtmediğiniz sürece varsayılan değerdir. , STATICve KEYSET imleçler DYNAMIC için SCROLLvarsayılan değerdir.

STATIC

İmleç tarafından kullanılacak verilerin geçici bir kopyasını oluşturan bir imleç tanımlar. İmleçteki tüm istekler içindeki tempdbbu geçici tablodan yanıtlandırılır. Sonuç olarak, imleç açıldıktan sonra temel tablolarda yapılan değişiklikler, imleçte yapılan getirmeler tarafından döndürülen verilere yansıtılır. Ayrıca bu imleç değişiklikleri desteklemez.

KEYSET

İmleç açıldığında, imleçteki satırların üyeliğinin ve sırasının sabit olduğunu belirtir. Satırları benzersiz olarak tanımlayan anahtar kümesi, içinde keysettable'da tempdbyerleşik olarak bulunur. İmleç sahibi tarafından yapılan veya diğer kullanıcılar tarafından işlenen temel tablolardaki anahtar olmayan değerlerde yapılan değişiklikler, imleç sahibi imlecin etrafında kaydırıldığında görünür. Diğer kullanıcılar tarafından yapılan eklemeler görünür değildir ve eklemeler Transact-SQL sunucu imleci aracılığıyla yapılamaz.

Bir satır silinirse, satırı getirme girişimi bir @@FETCH_STATUS döndürür -2. İmlecin dışındaki anahtar değerlerinin güncelleştirmeleri, eski satırın silinmesine ve ardından yeni satırın eklenmesine benzer. Yeni değerlere sahip satır görünmez ve eski değerlerin @@FETCH_STATUS-2döndüreceği satırı getirmeye çalışır. Güncelleştirme, yan tümcesini belirterek WHERE CURRENT OF imleç üzerinden gerçekleşirse yeni değerler görünür.

DYNAMIC

İmleç sahibi imlecin etrafında kaydırırken, sonuç kümesindeki satırlarda yapılan tüm veri değişikliklerini yansıtan bir imleç tanımlar. Satırların veri değerleri, sırası ve üyeliği her getirmede değişebilir. Mutlak ve göreli getirme seçenekleri dinamik imleçlerle desteklenmez.

FAST_FORWARD

İyileştirmelerin etkinleştirildiği bir FORWARD_ONLY, READ_ONLY imlecini belirtir. FAST_FORWARD da belirtildiğinde SCROLL belirtilemiyor.

READ_ONLY

Güncelleştirmelerin bu imleç üzerinden yapılmasını engeller. İmlece bir veya WHERE CURRENT OF deyimindeki yan UPDATEDELETE tümcesinde başvurulamazsınız. Bu seçenek, bir imlecin güncelleştirilecek varsayılan özelliğini geçersiz kılar.

PARŞÖMEN KİLİTİTİ

İmleç üzerinden yapılan konumlandırılmış güncelleştirmelerin veya silmelerin başarılı olması garanti edilir. SQL Server, satırları okundukça imleçte kilitler ve daha sonraki değişiklikler için kullanılabilirliklerini güvence altına alır. Ayrıca ne zaman SCROLL_LOCKS belirtileceğini belirtemezsinizFAST_FORWARD.

IYİMSER

Satır imleçte okunduktan sonra güncelleştirildiyse, imleç üzerinden yapılan konumlandırılmış güncelleştirmelerin veya silmelerin başarılı olmadığını belirtir. SQL Server, satırları imleçte okundukça kilitlemez. Bunun yerine, zaman damgası sütun değerlerinin karşılaştırmalarını veya tabloda zaman damgası sütunu yoksa sağlama toplamı değerini kullanarak satırın imleçte okunduktan sonra değiştirilip değiştirilmediğini belirler. Satır değiştirildiyse, konumlandırılan güncelleştirme veya silme girişimi başarısız olur. Ayrıca ne zaman OPTIMISTIC belirtileceğini belirtemezsinizFAST_FORWARD.

TYPE_WARNING

İmleç örtük olarak istenen türden başka bir türe dönüştürüldüğünde istemciye bir uyarı iletisi gönderileceğini belirtir.

BU select_statement

İmlecin sonuç kümesini tanımlayan standart SELECT bir deyim. ve anahtar sözcüklerine FOR BROWSEINTO imleç bildiriminin select_statement izin verilmez.

, , DISTINCTUNIONveya GROUP BYkullanıyorsanız HAVINGveya select_list bir toplama ifadesi eklerseniz, imleç olarak STATIColuşturulur.

Temel alınan her tablonun benzersiz bir dizini ve ISO SCROLL imleci yoksa veya Transact-SQL KEYSET bir imleç istenirse, imleç otomatik olarak bir STATIC imleç olur.

select_statement sütunların benzersiz satır tanımlayıcıları olmayan bir ORDER BY yan tümcesi içeriyorsa, DYNAMIC imleç imlece KEYSET veya STATIC imleç açılamıyorsa KEYSET imlece dönüştürülür. Bu işlem, ISO söz dizimi kullanılarak tanımlanan ancak anahtar sözcüğü olmayan STATIC bir imleç için de gerçekleşir.

YALNIZCA OKUMA

Güncelleştirmelerin bu imleç üzerinden yapılmasını engeller. İmlece bir veya WHERE CURRENT OF deyimindeki yan UPDATEDELETE tümcesinde başvurulamazsınız. Bu seçenek, bir imlecin güncelleştirilecek varsayılan özelliğini geçersiz kılar. Bu anahtar sözcük, ile READ_ONLYarasında READ alt çizgi yerine boşluk olmasıyla önceki ONLY anahtar sözcükten farklılık gösterir.

GÜNCELLEME [ column_name [ ,... n ] ] ]

İmleç içindeki güncelleştirilebilir sütunları tanımlar. Sağlanırsa OF <column_name> [ , ...n ] , yalnızca listelenen sütunlar değişikliklere izin verir. Liste sağlanmadığında, imleç olarak READ_ONLYtanımlanmadığı sürece tüm sütunlar güncelleştirilebilir.

Remarks

Bir değişken bildirildikten sonra olarak başlatılır NULL. SET Bildirilen değişkene olmayan NULL bir değer atamak için deyimini kullanın. SET Değişkene değer atayan deyimi tek bir değer döndürür. Birden çok değişken başlatırken, her yerel değişken için ayrı SET bir deyim kullanın.

Değişkenleri nesne adları veya anahtar sözcükler yerine yalnızca ifadelerde kullanabilirsiniz. Dinamik Transact-SQL deyimleri oluşturmak için kullanın EXECUTE.

ve SET @cursor_variable anahtar sözcüklerini içeren LOCALGLOBAL söz dizimi kuralları olsa da, söz dizimini SET @cursor_variable = CURSOR... kullandığınızda, varsayılan olarak yerel imleç veritabanı seçeneğinin ayarına bağlı olarak imleç veya GLOBALolarak LOCAL oluşturulur.

İmleç değişkenleri genel imleçlere başvursalar bile her zaman yereldir. İmleç değişkeni genel bir imlece başvurduğunda, imlecin hem genel hem de yerel imleç başvurusu vardır. Daha fazla bilgi için bkz . Örnek D, Genel imleçle SET kullanma.

Daha fazla bilgi için bkz . DECLARE CURSOR (Transact-SQL).

Bileşik atama işlecini işlecini, işlecin sağ tarafında değişkenler ve bir , SETve UPDATE deyimindeki SELECTbir RECEIVE ifadeyle birlikte atamanız olan her yerde kullanabilirsiniz.

Değerleri birleştirmek (yani toplama değerlerini hesaplamak için) deyiminde SELECT değişken kullanmayın. Listedeki tüm ifadeler (atamalar SELECT dahil) her çıkış satırı için tam olarak bir kez çalıştırılamadığından beklenmeyen sorgu sonuçları oluşabilir. Daha fazla bilgi için bkz. KB 287515.

Permissions

Genel rolde üyelik gerektirir. Tüm kullanıcılar kullanabilir SET @local_variable.

Examples

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

A. SET kullanarak başlatılan bir değişkenin değerini yazdırma

Aşağıdaki örnek değişkeni oluşturur @myVar , değişkene bir dize değeri koyar ve değişkenin @myVar değerini yazdırır.

DECLARE @myVar CHAR(20);
SET @myVar = 'This is a test';
SELECT @myVar;
GO

B. SELECT deyiminde SET kullanarak bir değer atanmış yerel değişken kullanma

Aşağıdaki örnek adlı @state bir yerel değişken oluşturur ve durumunda SELECTyaşayan tüm çalışanların adını (FirstName) ve aile adını (LastName) bulmak için deyimindeki Oregon yerel değişkeni kullanır.

USE AdventureWorks2022;
GO
DECLARE @state CHAR(25);
SET @state = N'Oregon';
SELECT RTRIM(FirstName) + ' ' + RTRIM(LastName) AS Name, City
FROM HumanResources.vEmployee
WHERE StateProvinceName = @state;
GO

C. Yerel değişken için bileşik atama kullanma

Aşağıdaki iki örnek aynı sonucu üretir. Her örnek adlı @NewBalancebir yerel değişken oluşturur, ile 10çarpar ve ardından yerel değişkenin yeni değerini bir SELECT deyimde görüntüler. İkinci örnekte bileşik atama işleci kullanılır.

/* Example one */
DECLARE @NewBalance INT;
SET @NewBalance = 10;
SET @NewBalance = @NewBalance * 10;
SELECT @NewBalance;
GO

/* Example Two */
DECLARE @NewBalance INT = 10;
SET @NewBalance *= 10;
SELECT @NewBalance;
GO

D. SET'i genel imleçle kullanma

Aşağıdaki örnek yerel bir değişken oluşturur ve ardından imleç değişkenini genel imleç adına ayarlar.

DECLARE my_cursor CURSOR GLOBAL
FOR SELECT * FROM Purchasing.ShipMethod
DECLARE @my_variable CURSOR ;
SET @my_variable = my_cursor ;
--There is a GLOBAL cursor declared(my_cursor) and a LOCAL variable
--(@my_variable) set to the my_cursor cursor.

DEALLOCATE my_cursor;
GO
--There is now only a LOCAL variable reference
--(@my_variable) to the my_cursor cursor.

E. SET kullanarak imleç tanımlama

Aşağıdaki örnek, bir imleç tanımlamak için deyimini SET kullanır.

DECLARE @CursorVar CURSOR;

SET @CursorVar = CURSOR SCROLL DYNAMIC
FOR
SELECT LastName, FirstName
FROM AdventureWorks2022.HumanResources.vEmployee
WHERE LastName like 'B%';

OPEN @CursorVar;

FETCH NEXT FROM @CursorVar;
WHILE @@FETCH_STATUS = 0
BEGIN
    FETCH NEXT FROM @CursorVar
END;

CLOSE @CursorVar;
DEALLOCATE @CursorVar;
GO

F. Sorgudan değer atama

Aşağıdaki örnekte bir değişkene değer atamak için bir sorgu kullanılır.

USE AdventureWorks2022;
GO
DECLARE @rows INT;
SET @rows = (SELECT COUNT(*) FROM Sales.Customer);
SELECT @rows;
GO

G. Türün bir özelliğini değiştirerek kullanıcı tanımlı tür değişkenine değer atama

Aşağıdaki örnek, türün özelliğinin Point değerini değiştirerek kullanıcı tanımlı tür (UDT) X için bir değer ayarlar.

DECLARE @p Point;
SET @p.X = @p.X + 1.1;
SELECT @p;
GO

Bu örnekte başvuruda Point bulunan UDT'yi oluşturma hakkında daha fazla bilgi edinin ve User-Defined Türleri Oluşturma makalesindeki aşağıdaki örnekleri inceleyin.

H. Türün bir yöntemini çağırarak kullanıcı tanımlı tür değişkenine değer atama

Aşağıdaki örnek, türün yöntemini çağırarak kullanıcı tanımlı tür SetXY için bir değer ayarlar.

DECLARE @p Point;
SET @p=point.SetXY(23.5, 23.5);

I. CLR türü için değişken oluşturma ve bir mutator yöntemi çağırma

Aşağıdaki örnek türü Pointiçin bir değişken oluşturur ve içinde bir mutator yöntemi Pointyürütür.

CREATE ASSEMBLY mytest FROM 'c:\test.dll' WITH PERMISSION_SET = SAFE
CREATE TYPE Point EXTERNAL NAME mytest.Point
GO
DECLARE @p Point = CONVERT(Point, '')
SET @p.SetXY(22, 23);

Örnekler: Azure Synapse Analytics ve Analytics Platform Sistemi (PDW)

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

J. SET kullanarak başlatılan bir değişkenin değerini yazdırma

Aşağıdaki örnek değişkeni oluşturur @myVar , değişkene bir dize değeri koyar ve değişkenin @myVar değerini yazdırır.

DECLARE @myVar CHAR(20);
SET @myVar = 'This is a test';
SELECT TOP 1 @myVar FROM sys.databases;

K. SELECT deyiminde SET kullanarak bir değer atanmış yerel değişken kullanma

Aşağıdaki örnek adlı @dept bir yerel değişken oluşturur ve departmanda çalışan tüm çalışanların adını (SELECT) ve aile adını (FirstName) bulmak için deyiminde LastNameMarketing bu yerel değişkeni kullanır.

DECLARE @dept CHAR(25);
SET @dept = N'Marketing';
SELECT RTRIM(FirstName) + ' ' + RTRIM(LastName) AS Name
FROM DimEmployee
WHERE DepartmentName = @dept;

L. Yerel değişken için bileşik atama kullanma

Aşağıdaki iki örnek aynı sonucu üretir. adlı @NewBalancebir yerel değişken oluştururlar, bunu 10 ile çarpar ve yerel değişkenin yeni değerini bir SELECT deyimde görüntüler. İkinci örnekte bileşik atama işleci kullanılır.

/* Example one */
DECLARE @NewBalance INT;
SET @NewBalance = 10;
SET @NewBalance = @NewBalance * 10;
SELECT TOP 1 @NewBalance
FROM sys.tables;

/* Example Two */
DECLARE @NewBalance INT = 10;
SET @NewBalance *= 10;
SELECT TOP 1 @NewBalance
FROM sys.tables;

M. Sorgudan değer atama

Aşağıdaki örnekte bir değişkene değer atamak için bir sorgu kullanılır.

-- Uses AdventureWorks

DECLARE @rows INT;
SET @rows = (SELECT COUNT(*) FROM dbo.DimCustomer);
SELECT TOP 1 @rows FROM sys.tables;