Aracılığıyla paylaş


Değişkenler (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ı

Transact-SQL yerel değişkeni, belirli bir türe ait tek bir veri değerini tutabilen bir nesnedir. Değişkenleri genellikle aşağıdaki amaçlarla toplu işlerde ve betiklerde kullanırsınız:

  • Bir döngünün kaç kez gerçekleştirildiğini saymak veya döngünün kaç kez gerçekleştirildiğini denetlemek için bir değişkeni sayaç olarak kullanın.
  • Akış denetimi deyimiyle test etmek için bir veri değeri tutun.
  • Saklı yordam dönüş kodu veya işlev dönüş değeriyle döndürülecek veri değerini kaydedin.

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

Remarks

Bazı Transact-SQL sistem işlevlerinin adları iki işaretle (@@) başlar. SQL Server'ın önceki sürümleri işlevlere @@ genel değişkenler olarak başvursa da, @@ işlevler değişken değildir ve değişkenlerle aynı davranışlara sahip değildir. İşlevler @@ sistem işlevleridir ve söz dizimi kullanımı işlevlerin kurallarına uyar.

Görünümde değişkenleri kullanamazsınız.

Değişkenlerdeki değişiklikler, bir işlemin geri alınmasından etkilenmez.

Transact-SQL değişkeni bildirme

Transact-SQL değişkenini başlatmak için deyimini DECLARE kullanın:

  • Ad atama. Ad tek @ bir karakterle başlamalıdır.

  • Sistem tarafından sağlanan veya kullanıcı tanımlı bir veri türü ve uzunluğu atama. Sayısal değişkenler için bir duyarlık ve isteğe bağlı ölçek atayabilirsiniz. XML türü değişkenler için isteğe bağlı olarak bir şema koleksiyonu atayabilirsiniz.

  • değeri olarak NULLayarlanır.

Örneğin, aşağıdaki DECLARE deyim @mycounter veri türüyle adlı bir yerel değişken oluşturur. Varsayılan olarak, bu değişkenin değeri şeklindedir NULL.

DECLARE @MyCounter AS INT;

Birden fazla yerel değişken bildirmek için, ilk yerel değişken tanımından sonra virgül kullanın ve sonraki yerel değişken adını ve veri türünü belirtin.

Örneğin, aşağıdaki DECLARE deyim , @FirstNameve @StateProvinceadlı @LastNameüç yerel değişken oluşturur ve her birini için NULLbaşlatır:

DECLARE @LastName AS NVARCHAR (30),
        @FirstName AS NVARCHAR (20),
        @StateProvince AS NCHAR (2);

Başka bir örnekte, aşağıdaki DECLARE deyim adlı @IsActivebir Boole değişkeni oluşturur ve değeri () ile 0false olarak bildirilir:

DECLARE @IsActive AS BIT = 0;

Değişken kapsam

Değişkenin kapsamı, değişkene başvurabilen Transact-SQL deyimleri aralığıdır. Değişkenin kapsamı, bildirildiği noktadan, bildirildiği toplu işlemin veya saklı yordamın sonuna kadar sürer. Örneğin, aşağıdaki betik bir söz dizimi hatası oluşturur çünkü değişken bir toplu işte (anahtar sözcükle GO ayrılmış olarak) bildirilir ve başka bir toplu işte başvurulur:

USE AdventureWorks2025;
GO

DECLARE @MyVariable AS INT;
SET @MyVariable = 1;

SELECT BusinessEntityID,
       NationalIDNumber,
       JobTitle
FROM HumanResources.Employee
WHERE BusinessEntityID = @MyVariable;

Değişkenler yerel kapsama sahiptir ve yalnızca bunları tanımladığınız toplu iş veya yordam içinde görünür. Aşağıdaki örnekte, yürütme sp_executesql için oluşturulan iç içe kapsam, daha yüksek kapsamda bildirilen değişkene erişime sahip değildir ve bir hata döndürür.

DECLARE @MyVariable AS INT;
SET @MyVariable = 1;

EXECUTE sp_executesql N'SELECT @MyVariable';

Bu sorgu aşağıdaki hatayı oluşturur:

Msg 137, Level 15, State 2, Line 1
Must declare the scalar variable "@MyVariable".

Transact-SQL değişkeninde değer ayarlama

Bir değişkeni ilk bildirdiğinizde değeri şeklindedir NULL. Bir değişkene değer atamak için deyimini SET kullanın. Bu yöntem, değişkene değer atamanın tercih edilen yoludur. Ayrıca, bir değişkene bir deyimin seçme listesinde başvurarak bir SELECT değer atayabilirsiniz.

deyimini SET kullanarak bir değişkene değer atamak için değişken adını ve değişkene atanacak değeri ekleyin. Bu yöntem, değişkene değer atamanın tercih edilen yoludur. Aşağıdaki toplu iş, örneğin, iki değişken bildirir, bunlara değerler atar ve sonra bunları bir WHERE deyiminin SELECT yan tümcesinde kullanır:

USE AdventureWorks2025;
GO

-- Declare two variables.
DECLARE @FirstNameVariable AS NVARCHAR (50),
        @PostalCodeVariable AS NVARCHAR (15);

-- Set their values.
SET @FirstNameVariable = N'Amy';
SET @PostalCodeVariable = N'BA5 3HX';

-- Use them in the WHERE clause of a SELECT statement.
SELECT LastName,
       FirstName,
       JobTitle,
       City,
       PostalCode,
       StateProvinceName,
       CountryRegionName
FROM HumanResources.vEmployee
WHERE FirstName = @FirstNameVariable
      OR PostalCode = @PostalCodeVariable;

Ayrıca, bir değere seçim listesinde başvurarak değişkene de atayabilirsiniz. Seçme listesindeki bir değişkene başvuruda bulunursanız, değişkene bir skaler değer atayın veya deyiminin yalnızca bir satır döndürdüğünden SELECT emin olun. Örneğin:

USE AdventureWorks2025;
GO

DECLARE @EmpIDVariable AS INT;

SELECT @EmpIDVariable = MAX(BusinessEntityID)
FROM HumanResources.Employee;

Warning

Tek SELECT bir deyimde birden çok atama yan tümcesi varsa, Veritabanı Altyapısı ifadelerin değerlendirilme sırasını garanti etmez. Efektler yalnızca atamalar arasında başvurular varsa görünür.

Bir SELECT deyim birden fazla satır döndürürse ve değişken bir nonscalar ifadeye başvuruda bulunursa, değişken sonuç kümesinin son satırında ifade için döndürülen değere ayarlanır. Örneğin, aşağıdaki toplu işlemde @EmpIDVariable döndürülen son satırın değerine ayarlanırBusinessEntityID. Bu değer:1

USE AdventureWorks2025;
GO

DECLARE @EmpIDVariable AS INT;

SELECT @EmpIDVariable = BusinessEntityID
FROM HumanResources.Employee
ORDER BY BusinessEntityID DESC;

SELECT @EmpIDVariable;

Examples

Aşağıdaki betik küçük bir test tablosu oluşturur ve 26 satırla doldurur. Betik, üç şey yapmak için bir değişken kullanır:

  • Döngünün kaç kez yürütülür denetleyerek kaç satır eklendiğini kontrol edin.
  • Tamsayı sütununa eklenen değeri sağlayın.
  • Karakter sütununa eklenecek harfleri oluşturan ifadenin bir parçası olarak işlev.
-- Create the table.
CREATE TABLE TestTable
(
    cola INT,
    colb CHAR (3)
);

SET NOCOUNT ON;

-- Declare the variable to be used.
DECLARE @MyCounter AS INT;

-- Initialize the variable.
SET @MyCounter = 0;

-- Test the variable to see if the loop is finished.
WHILE (@MyCounter < 26)
    -- Insert a row into the table.
    BEGIN
        INSERT INTO TestTable
        -- Use the variable to provide the integer value
        -- for cola. Also use it to generate a unique letter
        -- for each row. Use the ASCII function to get the
        -- integer value of 'a'. Add @MyCounter. Use CHAR to
        -- convert the sum back to the character @MyCounter
        -- characters after 'a'.
        VALUES (
            @MyCounter,
            CHAR((@MyCounter + ASCII('a')))
        );
        -- Increment the variable to count this iteration
        -- of the loop.
        SET @MyCounter = @MyCounter + 1;
    END
SET NOCOUNT OFF;

-- View the data.
SELECT cola,
       colb
FROM TestTable;
DROP TABLE TestTable;