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. Toplu ve betiklerdeki değişkenler genellikle kullanılır:

  • 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 sayaç olarak.
  • Akış denetimi deyimi tarafından test edilecek bir veri değerini tutmak için.
  • Saklı yordam tarafından döndürülecek bir veri değerini kaydetmek için kod veya işlev dönüş değeri döndürür.

Remarks

Bazı Transact-SQL sistem işlevlerinin adları iki işaretle (@@) başlar. SQL Server'ın @@ önceki sürümlerinde işlevler genel değişkenler olarak adlandırılır, @@ 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

deyimi, DECLARE şu şekilde bir Transact-SQL değişkeni başlatır:

  • Ad atama. Adın ilk karakter olarak tek @ bir karakteri olmalı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 ölçek de atanır. XML türü değişkenler için isteğe bağlı bir şema koleksiyonu atanabilir.

  • 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 INT;

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

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

DECLARE @LastName NVARCHAR(30), @FirstName NVARCHAR(20), @StateProvince 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 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 AdventureWorks2022;
GO

DECLARE @MyVariable INT;

SET @MyVariable = 1;
GO

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

Değişkenler yerel kapsama sahiptir ve yalnızca tanımlandığı 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 döndürür ve hata verir.

DECLARE @MyVariable INT;
SET @MyVariable = 1;
EXECUTE sp_executesql N'SELECT @MyVariable'; -- this produces an error

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

Bir değişken ilk bildirildiğinde değeri olarak NULLayarlanır. Bir değişkene değer atamak için deyimini SET kullanın. Bu, bir değişkene değer atamak için tercih edilen yöntemdir. Değişkene, bir deyimin seçme listesinde başvurularak atanmış bir SELECT değer de olabilir.

SET deyimini kullanarak bir değişkene değer atamak için değişken adını ve değişkene atanacak değeri ekleyin. Bu, bir değişkene değer atamak için tercih edilen yöntemdir. 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 AdventureWorks2022;
GO

-- Declare two variables.
DECLARE @FirstNameVariable NVARCHAR(50),
    @PostalCodeVariable 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,
    StateProvinceName,
    CountryRegionName
FROM HumanResources.vEmployee
WHERE FirstName = @FirstNameVariable
    OR PostalCode = @PostalCodeVariable;
GO

Bir değişkene, seçme listesinde başvurularak atanmış bir değer de olabilir. Seçme listesinde bir değişkene başvurulursa, bir skaler değer atanmalıdır veya SELECT deyimi yalnızca bir satır döndürmelidir. Örneğin:

USE AdventureWorks2022;
GO
DECLARE @EmpIDVariable INT;

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

Warning

Tek SELECT bir deyimde birden çok atama yan tümcesi varsa, SQL Server 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 AdventureWorks2022;
GO
DECLARE @EmpIDVariable INT;

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

SELECT @EmpIDVariable;
GO

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));
GO

SET NOCOUNT ON;
GO

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

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

-- Test the variable to see if the loop is finished.
WHILE (@MyCounter < 26)
BEGIN;
    -- Insert a row into the table.
    INSERT INTO TestTable
    VALUES
        -- 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'.
        (
        @MyCounter,
        CHAR((@MyCounter + ASCII('a')))
        );

    -- Increment the variable to count this iteration
    -- of the loop.
    SET @MyCounter = @MyCounter + 1;
END;
GO

SET NOCOUNT OFF;
GO

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

DROP TABLE TestTable;
GO