Aracılığıyla paylaş


Transact-SQL değişkenleri

C Transact-SQL yerel değişken belirli bir türdeki tek bir veri değeri tutan bir nesnedir. Toplu işlemleri'ni veya komut dosyalarında değişkenlerin genellikle kullanılır:

  • Sayaç olarak gerçekleştirilen bir döngü sayısını saymak veya kaç kez denetlemek için döngü gerçekleştirilir.

  • Bir akış denetimi deyim ile test edilecek veri değeri saklamak için .

  • Veri değeri tarafından döndürülecek kaydetmek için bir saklı yordam kod veya işlevin dönüş değerini döndürür.

Not

Bazı adlar Transact-SQL Sistem işlevleri, iki saat (@) işareti ile başlar. Although in earlier versions of Microsoft SQL Server, the @@functions are referred to as global variables, they are not variables and do not have the same behaviors as variables.@@ Işlevleri sistem işlevleri; sözdizimi kullanımları işlevler için kurallar izler.

Aşağıdaki komut dosyası, küçük bir sınama bir tablo oluşturur ve bunu 26 satırlarla doldurur.Komut dosyası, üç şey yapmak için bir değişken kullanır:

  • Döngünün yürütülmesi kaç kez denetleyerek kaç satır eklenen denetim.

  • Tamsayı eklenen değer sütun.

  • Harf karakter sütuna eklenecek üreten ifade 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

Bir Transact-SQL değişken bildirme

DECLARE deyim başlatan bir Transact-SQL değişken olarak:

  • Bir adı atama.Adı, ilk karakteri olarak tek bir @ olması gerekir.

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

  • Değer NULL olarak ayarlanıyor.

Örneğin, aşağıdaki DECLARE deyim adlı bir yerel değişken oluşturur. @ mycounter with an Int veri türü.

DECLARE @MyCounter int;

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

Örneğin, bu DECLARE deyim adlı üç yerel değişkenleri oluşturur. @ Soyadı, @ Adı and @ StateProvinceve başlatılırken her için NULL:

DECLARE @LastName nvarchar(30), @FirstName nvarchar(20), @StateProvince nchar(2);

Değişken kapsam aralık Transact-SQL değişken baþvurabilirsiniz deyimleri. Toplu iş veya saklı yordam içinde bildirildi sonuna kadar bildirilen noktasından değişken kapsam sürer.Örneğin, değişken bir toplu iş bildirilmiş ve başka bir programda başvurulan olduğundan bu komut dosyası sözdizimi hatası oluşturur:

USE AdventureWorks;
GO
DECLARE @MyVariable int;
SET @MyVariable = 1;
-- Terminate the batch by using the GO keyword.
GO 
-- @MyVariable has gone out of scope and no longer exists.

-- This SELECT statement generates a syntax error because it is
-- no longer legal to reference @MyVariable.
SELECT EmployeeID, NationalIDNumber, Title
FROM HumanResources.Employee
WHERE EmployeeID = @MyVariable;

Değişkenleri yerel kapsam varsa ve yalnızca tanımlandıkları toplu iş iş ya da yordam içinde görünür.Aşağıdaki örnekte, iç içe geçmiş kapsamı sp_executesql yürütülmesi için oluşturulan erişim için üst kapsam ve döndürür ve hata bildirilen değişken yok.

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

Değer bir Transact-SQL değişken ayarlanıyor

Önce bildirilen bir değişken değeri NULL olarak küme.Değer bir değişkene atamak için , the küme kullanın deyim.Bu değişken için bir değer atayarak, tercih edilen yöntemdir.Değişken bir SELECT seçme listesinde başvurulan tarafından atanmış bir değere sahip olabilir deyim.

küme'ni kullanarak, bir değişken değeri atamak için deyim, değişken adını ve değişkenine atamak için bu değeri içerir.Bu değişken için bir değer atayarak, tercih edilen yöntemdir.Bu toplu iş iş işlem, örneğin, iki değişken bildirir değerler bunlara atar ve sonra bunları bir SELECT WHERE yan tümcesi kullanan deyim:

USE AdventureWorks;
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şken, bir seçim listesinde başvurulan tarafından atanan bir değer de olabilir.Değişken bir seçim listesinde başvuruda bulunulan, skaler değer atanmalıdır veya SELECT deyiminde yalnızca bir satır döndürmelidir.Örneğin:

USE AdventureWorks;
GO
DECLARE @EmpIDVariable int;

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

Uyarı

Tek bir deyim içinde birden çok atama yan tümcesi varsa, SQL Server deyimleri Değerlendirme sırasını garanti etmez.Efektleri yalnızca Atamalar arasında başvuru varsa görünür olduğuna dikkat edin.

Bir SELECT ifade birden fazla satır döndürür ve nonscalar bir ifade değişkeni başvuruyor, değişkeni, sonuç kümesindeki son satırın ifade için döndürülen değere küme.Örneğin, bu toplu iş iş iş @ EmpIDVariable için ayarlanmıştırÇalışanNo Son satırın değeri 1 olan döndürdü:

USE AdventureWorks;
GO
DECLARE @EmpIDVariable int;

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

SELECT @EmpIDVariable;
GO