DECLARE @local_variable (Transact-SQL)

Değişkenler bir toplu işin veya yordamın gövdesinde DECLARE deyimi ile bildirilir ve bunlara bir SET veya SELECT deyimi ile değer atanır. İmleç değişkenleri bu deyim ile bildirilebilir ve imleç bağlantılı diğer deyimlerle kullanılabilir. Bildirildikten sonra, bildirimin bir parçası olarak bir değer sağlanmadıkça tüm değişkenlere ilk olarak NULL değeri atanır.

Konu bağlantısı simgesi Transact-SQL Sözdizim Kuralları

Sözdizimi

DECLARE 
     { 
{{ @local_variable [AS] data_type } | [ = value ] }
    | { @cursor_variable_name CURSOR }
} [,...n] 
    | { @table_variable_name [AS] <table_type_definition> | <user-defined table type> } 

<table_type_definition> ::= 
     TABLE ( { <column_definition> | <table_constraint> } [ ,... ] 
   ) 

<column_definition> ::= 
     column_name { scalar_data_type | AS computed_column_expression }
     [ COLLATE collation_name ] 
     [ [ DEFAULT constant_expression ] | IDENTITY [ (seed ,increment ) ] ] 
     [ ROWGUIDCOL ] 
     [ <column_constraint> ] 

<column_constraint> ::= 
     { [ NULL | NOT NULL ] 
     | [ PRIMARY KEY | UNIQUE ] 
     | CHECK ( logical_expression ) 
     | WITH ( <index_option > )
     } 

<table_constraint> ::= 
     { { PRIMARY KEY | UNIQUE } ( column_name [ ,... ] ) 
     | CHECK ( search_condition ) 
     } 

<index_option> ::=
See CREATE TABLE for index option syntax.

Bağımsız değişkenler

  • @local\_variable
    Bir değişenin adıdır. Değişken adları bir @ işareti ile başlamalıdır. Yerel değişken adları tanımlayıcılar için geçerli kurallara uymalıdır.

  • data_type
    Sistem tarafından sağlanan, ortak dil çalışma zamanı (CLR) kullanıcısı tarafından tanımlanan tablo türü veya diğer adlı veri türüdür. Değişkenler text, ntext veya image veri türünde olamaz.

    Sistem veri türleri hakkında daha fazla bilgi için, bkz. Veri Türleri (Transact-SQL). CLR kullanıcısı tanımlı türler veya diğer adlı veri türleri hakkında daha fazla bilgi için bkz. CREATE TYPE (Transact-SQL).

  • =value
    Değişeken satır içinde bir değer atar. Değer bir sabit veya bir değişken olabilir, ancak değişken bildirim türü ile uyuşmalı veya örtülü olarak o türe dönüştürülebilir olmalıdır.

  • @cursor\_variable\_name
    Bir imleç değişeninin adıdır. İmleç değişkeni adları bir @ işareti ile başlamalı ve tanımlayıcı kurallarına uymalıdır.

  • CURSOR
    Değişkenin yerel bir imleç değişkeni olduğunu belirtir.

  • @table\_variable\_name
    table türünde bir değişkenin adıdır. Değişken adları bir @ işareti ile başlamalı ve tanımlayıcı kurallarına uymalıdır.

  • <tablo_türü_tanımı>
    table veri türünü tanımlar. Tablo bildirimi sütun tanımlarını, adları, veri türlerini ve kısıtlamaları içerir. Kullanılabilen kısıtlama türleri yalnızca PRIMARY KEY, UNIQUE, NULL ve CHECK'tir. Diğer adlı bir veri türü, bir kural veya tanım bu türe bağlıysa bir sütun skaler veri türü olarak kullanılamaz.

    <tablo_türü_tanımı>, CREATE TABLE'da tablo tanımlamak için kullanılan bir bilgi alt kümesidir. Öğeler ve önemli tanımlar buraya dahil edilir. Daha fazla bilgi için, bkz. Tablo (Transact-sql) oluştur.

  • n
    Birden çok değişkenin belirtilebileceğini ve değer alabileceğini gösteren bir yer tutucudur. table değişkenleri bildirilirken table değişkeninin DECLARE deyimindeki tek değişken olması gerekir.

  • column_name
    Tablodaki sütunun adıdır.

  • scalar_data_type
    Sütunun skaler bir değişken olduğunu belirtir.

  • computed_column_expression
    Hesaplanan bir sütunun değerini tanımlayan bir ifadedir. Aynı tablodaki başka sütunları kullanan bir ifadeden hesaplanır. Örneğin hesaplanan bir sütunun tanımı maliyet AS fiyat * miktar olabilir. İfade hesaplanmayan bir sütun adı, bir sabit, yerleşik bir işlev, bir değişken veya bunların bir veya birkaç işleçle birleştirilmiş bir bileşimi olabilir. İfade bir alt sorgu veya kullanıcı tanımlı bir işlev olamaz. İfade bir CLR kullanıcısı tarafından tanımlanmış bir türe başvuramaz.

  • [ COLLATE collation_name]
    Sütunun harmanlamasını belirtir. collation_name bir Windows harmanlama adı veya bir SQL harmanlama adı olabilir ve yalnızca char, varchar, text, nchar, nvarchar ve ntext veri türleri için geçerlidir. Belirtilmezse, sütuna (sütunun türü kullanıcı tarafından tanımlanmış bir türse) kullanıcı tarafından tanımlanmış türün harmanlaması veya geçerli veritabanının harmanlaması atanır.

    Windows ve SQL harmanlama adları için, bkz. HARMANLAMA (Transact-sql).

  • DEFAULT
    Bir ekleme sırasında açıkça bir değer sağlanmazsa, sütun için sağlanan değeri belirtir. DEFAULT tanımları, timestamp olarak tanımlananlar veya IDENTITY özelliğine sahip olanlar dışında her sütuna uygulanabilir. DEFAULT tanımlar tablo bırakıldığında kaldırılır. Yalnızca bir karakter dizesi gibi sabit bir değer, SYSTEM_USER() bir sistem işlevi veya NULL varsayılan değer olarak kullanılabilir. SQL Server'sın önceki sürümleriyle uyumluluğu korumak için bir DEFAULT komutuna bir kısıtlama adı atanabilir.

  • constant_expression
    Sütunun varsayılan değeri olarak kullanılan bir sabit, NULL veya bir sistem işlevidir.

  • IDENTITY
    Yeni sütunun bir kimlik sütunu olduğunu belirtir. Tabloya yeni bir satır eklendiğinde, SQL Server sütun için benzersiz bir artım değeri sağlar. Kimlik sütunları, tablonun benzersiz satır tanımlayıcısı görevini görmesi için sıklıkla PRIMARY KEY kısıtlamaları ile birlikte kullanılır. IDENTITY özelliği tinyint, smallint, int, decimal(p,0) veya numeric(p,0) sütunlarına atanabilir. Tablo başına yalnızca bir kimlik sütunu oluşturulabilir. Bağlı varsayılan değerler ve DEFAULT kısıtlamaları bir kimlik sütunu ile kullanılamaz. Hem kök hem de artım değerini belirtmeli veya hiçbirini belirtmemelisiniz. Hiçbiri belirtilmezse, varsayılan değer (1,1) olur.

  • seed
    Tabloya yüklenen ilk satır için kullanılan değerdir.

  • increment
    Yüklenen bir önceki satırın kimlik değerine eklenen artım değeridir.

  • ROWGUIDCOL
    Yeni sütunun bir satır genel benzersiz tanımlayıcısı sütunu olduğunu belirtir. Tablo başına yalnızca bir uniqueidentifier sütunu ROWGUIDCOL sütunu olarak atanabilir. ROWGUIDCOL özelliği yalnızca bir uniqueidentifier sütununa atanabilir.

  • NULL | NOT NULL
    Sütunda null değerler olup olamayacağını belirleyen anahtar sözcüklerdir.

  • PRIMARY KEY
    Belirli bir sütunda veya sütunlarda varlık bütünlüğünü benzersiz bir dizin yoluyla zorlayan bir kısıtlamadır. Tablo başına yalnızca bir PRIMARY KEY kısıtlaması oluşturulabilir.

  • UNIQUE
    Belirli bir sütunda veya sütunlarda benzersiz bir dizin yoluyla varlık bütünlüğü sağlayan bir kısıtlamadır. Bir tablonun birden fazla UNIQUE kısıtlaması olabilir.

  • CHECK
    Etki alanı bütünlüğünü bir sütuna veya sütunlara girilebilecek olası değerleri sınırlayarak zorlayan bir kısıtlamadır.

  • logical_expression
    TRUE veya FALSE döndüren mantıksal bir ifadedir.

  • <kullanıcı tanımlı tablo türü>
    Değişkenin kullanıcı tarafından tanımlanmış bir tablo olduğunu belirtir.

Açıklamalar

Değişkenler, sıklıkla, bir toplu işte veya yordamda WHILE, LOOP veya IF...ELSE bloklarının sayacı olarak kullanılır.

Değişkenler yalnızca ifadelerde kullanılabilir; nesne adlarının veya anahtar sözcüklerin yerine kullanılamaz. Dinamik SQL deyimleri oluşturmak için EXECUTE kullanın.

Yerel bir değişkenin kapsamı, içinde bildirildiği toplu iştir.

Kendisine halen bir imleç atanmış bir imleç değişkenine şu deyimlerde bir kaynak olarak başvurulabilir:

  • CLOSE deyimi.

  • DEALLOCATE deyimi.

  • FETCH deyimi.

  • OPEN deyimi.

  • Konumlandırılmış DELETE veya UPDATE deyimi.

  • SET CURSOR değişkeni deyimi (sağ tarafta).

Bu deyimlerin tümünde, başvurulan bir imleç değişkeninin halen atanmış bir imleci yoksa, SQL Server bir hata üretir. Başvurulan bir imleç değişkeni yoksa, SQL Server, bildirilmemiş ve başka türde bir değişken için üretilenle aynı hatayı üretir.

Bir imleç değişeni:

  • Bir imleç türünün veya başka bir imleç değişkeninin hedefi olabilir. Daha fazla bilgi için, bkz. set @ local_variable (Transact-sql).

  • İmleç değişkeninin halen kendisine atanmış bir imleci yoksa, bir EXECUTE deyiminde bir çıktı imleç parametresinin hedefi olarak başvurulabilir.

  • İmlecin bir işaretçisi olarak düşünülmelidir.

Örnekler

A.DECLARE Kullanma

Aşağıdaki örnek, Man ile başlayan tüm soyadlarının kişi bilgilerini almak için @find adlı bir yerel değişken kullanır.

USE AdventureWorks2012;
GO
DECLARE @find varchar(30);
/* Also allowed: 
DECLARE @find varchar(30) = 'Man%';
*/
SET @find = 'Man%';
SELECT p.LastName, p.FirstName, ph.PhoneNumber
FROM Person.Person p 
JOIN Person.PersonPhone ph
ON p.BusinessEntityID = ph.BusinessEntityID
WHERE LastName LIKE 'Man%';

USE AdventureWorks2012;
GO
DECLARE @find varchar(30);
/* Also allowed: 
DECLARE @find varchar(30) = 'Man%';
*/
SET @find = 'Man%';
SELECT p.LastName, p.FirstName, ph.PhoneNumber
FROM Person.Person p 
JOIN Person.PersonPhone ph
ON p.BusinessEntityID = ph.BusinessEntityID
WHERE LastName LIKE 'Man%';

Sonuç kümesi buradadır.

LastName FirstName Phone

-------------------------------------------------- -------------------------------------------------- -------------------------

Manchepalli Ajay 1 (11) 500 555-0174

Manek Parul 1 (11) 500 555-0146

Manzanares Tomas 1 (11) 500 555-0178

(3 row(s) affected)

B.DECLARE deyimini iki değişkenle kullanma

Aşağıdaki örnek, Kuzey Amerika satış bölgesinde bulunan ve yolda en az 2.000.000 dolarlık satışı olan Adventure Works Cycles satış temsilcilerinin adlarını almaktadır.

USE AdventureWorks2012;
GO
SET NOCOUNT ON;
GO
DECLARE @Group nvarchar(50), @Sales money;
SET @Group = N'North America';
SET @Sales = 2000000;
SET NOCOUNT OFF;
SELECT FirstName, LastName, SalesYTD
FROM Sales.vSalesPerson
WHERE TerritoryGroup = @Group and SalesYTD >= @Sales;

USE AdventureWorks2012;
GO
SET NOCOUNT ON;
GO
DECLARE @Group nvarchar(50), @Sales money;
SET @Group = N'North America';
SET @Sales = 2000000;
SET NOCOUNT OFF;
SELECT FirstName, LastName, SalesYTD
FROM Sales.vSalesPerson
WHERE TerritoryGroup = @Group and SalesYTD >= @Sales;

C.Tablo türünde bir değişken tanıtma

Aşağıdaki örnek UPDATE deyiminin OUTPUT yan tümcesinde belirtilen değerleri depolayan bir table değişkeni bildirmektedir. Ardından, değerleri @MyTableVar değişkeninde döndüren ve güncelleştirme işleminin sonuçlarını Employee tablosunda toplayan iki SELECT deyimi gelmektedir. INSERTED.ModifiedDate sütunundaki sonuçların Employee tablosundaki ModifiedDate sütunundaki değerlerden farklı olduğuna dikkat edin. Bunun nedeni, Employee tablosunda, ModifiedDate değerini geçerli tarihle güncelleştiren AFTER UPDATE tetikleyicisinin tanımlanmış olmasıdır. Ancak, OUTPUT deyiminden dönen sütunlar tetikleyiciler yürütülmeden önceki verileri yansıtmaktadır. Daha fazla bilgi için, bkz. output Yantümcesi (Transact-sql).

USE AdventureWorks2012;
GO
DECLARE @MyTableVar table(
    EmpID int NOT NULL,
    OldVacationHours int,
    NewVacationHours int,
    ModifiedDate datetime);
UPDATE TOP (10) HumanResources.Employee
SET VacationHours = VacationHours * 1.25,
    ModifiedDate = GETDATE() 
OUTPUT inserted.BusinessEntityID,
       deleted.VacationHours,
       inserted.VacationHours,
       inserted.ModifiedDate
INTO @MyTableVar;
--Display the result set of the table variable.
SELECT EmpID, OldVacationHours, NewVacationHours, ModifiedDate
FROM @MyTableVar;
GO
--Display the result set of the table.
SELECT TOP (10) BusinessEntityID, VacationHours, ModifiedDate
FROM HumanResources.Employee;
GO

D.Kullanıcı tarafından tanımlanmış bir tablo türünde değişken tanıtma

Aşağıdaki örnek @LocationTVP adlı tablo değerli bir parametre veya tablo değişkeni oluşturmaktadır. Bu, kullanıcı tarafından tanımlanmış LocationTableType adlı karşılık gelen bir tablo türü gerektirir. Kullanıcı tarafından tanımlanmış bir tablo oluşturma hakkında daha fazla bilgi için, bkz. CREATE TYPE (Transact-SQL). Tablo değerli parametreler konusunda daha fazla bilgi için bkz. Tablo Valued Parametreler (veritabanı altyapısı) kullanma.

DECLARE @LocationTVP 
AS LocationTableType;

DECLARE @LocationTVP 
AS LocationTableType;

Ayrıca bkz.

Başvuru

execute (Transact-sql)

Yerleşik İşlevler (Transact-SQL)

select (Transact-sql)

Tablo (Transact-sql)

Kavramlar

Yazılı xml yazılmamış xml karşılaştırın