DECLARE @local_variable (Transact-SQL)
Değişkenleri bir toplu iş veya yordamı declare deyim ile gövdesinde bildirilen ve değerler KÜMESİ ya da select deyimkullanılarak atanır.İmleç değişkenleri bu deyim ile bildirilen ve diğer imleçile kullanılan-ilgili ifadeleri.Bir değer bildirimbir parçası olarak sunulan sürece bildirimardýndan tüm değişkenler null başlatılır.
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 )
}
<table_constraint> ::=
{ { PRIMARY KEY | UNIQUE } ( column_name [ ,... ] )
| CHECK ( search_condition )
}
Bağımsız değişkenler
@local_variable
Bir değişken adıdır.Değişken adları ile başlaması bir at (@) işareti.Yerel değişken adları gerekir kurallarını karşılayan tanımlayıcıları.data_type
Herhangi bir sistem tarafından sağlanan, ortak dil çalışma zamanı (clr) kullanıcı tanımlı tablo türü ya da diğer ad veri türü.Bir değişkeni, olamaz text, ntext, veya image veri türü.Sistem veri türleri hakkında daha fazla bilgi için bkz: Veri Türleri (Transact-SQL).clr türü kullanıcı tanımlı veya diğer ad veri türleri hakkında daha fazla bilgi için bkz: Tür (Transact-SQL) oluştur.
=value
Değişken satır içi için bir değer atar.Değer bir sabit veya bir ifadeolabilir ancak bu değişken bildirim türüyle eşleşmesi veya o türüne örtük olarak dönüştürülebilir.@cursor_variable_name
Bir imleç değişken adıdır.İmleç değişken adları ile başlaması bir at (@) imzalamak ve tanımlayıcıları. kurallarına uymakİMLEÇ
Değişken bir yerel imleç değişken olduğunu belirtir.@table_variable_name
Türünde bir değişken adı table.Değişken adları ile başlaması bir at (@) imzalamak ve tanımlayıcıları. kurallarına uymak<table_type_definition>
Tanımlar table veri türü.bildirim tablo sütun tanımları, adlar, veri türleri ve sınırlamaları içerir. İzin verilen tek kısıtlama birincil anahtar, benzersiz, null ve onay türleridir.sütunskaler veri türü bir kural, bir diğer ad veri türü kullanılamaz veya varsayılan tanımını türüne bağlıdır.<table_type_definition> create table tablo tanımlamak için kullanılan bilgileri bir alt küme kümesidir.Öğeleri ve gerekli tanımları arasındadır.Daha fazla bilgi için, bkz. CREATE TABLE (Transact-SQL).
n
Yer tutucu birden çok değişken belirtilen ve değerleri atanmış olması gerektiğini belirten olur.Bildirirken table değişkenleri, table declare deyimiçinde bildirilen yalnızca değişken değişken olmalı.column_name
tablo sütun addır.scalar_data_type
sütun skaler veri türü olduğunu belirtir.computed_column_expression
Bir ifade , hesaplanmış bir sütundeğeri tanımlama olduğu.Diğer sütunlar aynı tablokullanarak bir ifade hesaplanır.Örneğin, hesaplanmış bir sütun tanımı olabilir Maliyet as Fiyat * miktar.ifade , bir noncomputed sütun adı, sabit, yerleşik işlev, değişken veya bu bağlı bir veya daha çok işleç tarafından herhangi bir birleşimi olabilir.ifade , bir alt sorgu veya kullanıcı tanımlı bir işlevolamaz.ifade , bir CLR kullanıcı tanımlı türübaşvuru yapamazsınız.[ COLLATE collation_name]
sütun harmanlama belirtir.collation_nameWindows harmanlama adı veya bir SQL harmanlama adı olabilir ve yalnızca sütun için uygulanabilir char, varchar, text, nchar, nvarchar, ve ntext veri türü.Belirtilmezse, sütun ( sütun kullanıcı tanımlı veri türü ise) kullanıcı tanımlı veri türü harmanlama veya geçerli veritabanı harmanlama atanır.Windows ve SQL harmanlama adları hakkında daha fazla bilgi için bkz: HARMANLAMA (Transact-SQL).
VARSAYILAN
Bir değer açıkça bir ekleme sırasında değil sağlandığında sütun için sağlanan değer belirtir.Varsayılan tanımları, tüm sütunları olarak tanımlananlar dışında uygulanabilir timestamp ya da kimlik özellikolanlar.tablo bırakılan varsayılan tanımları kaldırılır.Yalnızca sabit bir değer, bir karakter dizegibi; bir sistem işlevgibi bir system_user(); veya null varsayılan olarak kullanılabilir.Önceki sürümleri ile uyumluluk sağlamak için SQL Server, kısıtlama adı, varsayılan atanabilirconstant_expression
Bir sabit, null veya sütuniçin varsayılan değer olarak kullanılan bir sistem işlev olabilir.KİMLİK
Yeni bir sütun kimlik sütunolup olmadığını gösterir.tabloyeni bir satır eklendiğinde SQL Server ' % s'sütun sütuniçin benzersiz bir artımlı değeri sağlar.Kimlik sütunları, tabloiçin benzersiz satır tanımlayıcısı olarak hizmet verecek genellikle birincil anahtar kısıtlamaları ile birlikte kullanılır.KİMLİK özellik atanabilir tinyint, smallint, int, decimal(p,0), veya numeric(p,0) sütunlar.Her tabloyalnızca bir kimlik sütun oluşturulabilir.Kimlik sütunile ilişkili varsayılanları ve varsayılan kısıtlamalar kullanılamaz.Hem çekirdek ve Artım veya ikisi de belirtmeniz gerekir.Hiçbiri belirtilmediyse varsayılan (1,1) ' dir.seed
İlk satır için kullanılan değer tabloyüklenir.increment
Yüklenen önceki satır kimlik değerini eklenen artımlı değerdir.ROWGUIDCOL
Yeni sütun , satır genel benzersiz tanımlayıcı sütunolduğunu gösterir.Tek bir uniqueidentifiersütun tablo başına belirlenmiş ROWGUIDCOL sütunolarak.ROWGUIDCOL özellik yalnızca atanabilir bir uniqueidentifier sütun.NULL | NOT NULL
sütun null değerlere izin verilip verilmediğini belirleyen anahtar sözcüklerdir.BİRİNCİL ANAHTAR
Belirli sütun veya sütunları benzersiz diziniçin varlıkbütünlük zorlar bir sınırlamadır. Her tabloyalnızca bir birincil anahtar kısıtlaması oluşturulur.BENZERSİZ
Belirli sütun veya sütunları benzersiz diziniçin varlıkbütünlük sağlar bir sınırlamadır. Bir tablo , birden çok benzersiz kısıtlamaları olabilir.ONAY
Bir sütun veya sütunlara girilebilecek olası değerler sınırlayarak etki alanıbütünlük zorlar bir sınırlamadır.logical_expression
true veya false döndüren mantıksal bir ifade olur.<kullanıcı tanımlı tablo türü>
Değişken olduğunu belirtir bir kullanıcı tanımlı tablo türü.
Açıklamalar
Değişkenler genellikle bir toplu iş veya yordamı sayaçlarla veya IF, WHILE döngüsü, için kullanılır...BAŞKA blok.
Değişkenleri yalnızca değil yerine nesne adlarını veya anahtar sözcükler, ifadeler kullanılabilir.Dinamik SQL deyimleri oluşturmak için Çalıştır'ı kullanın.
Yerel bir değişken kapsam içinde bildirilmiş toplu iş olur.
A: bir kaynak olarak atanmış bir imleç geçerli olan bir imleç değişken başvurulan
Kapat deyim.
deallocate deyim.
deyimGETİR.
AÇIK deyim.
Konumlandırılmış delete veya update deyim.
İMLECİ ayarlama (sağ tarafta) değişken deyim .
Tüm bu ifadeler SQL Server , başvurulan imleç değişken var ancak bir imleç it. şu anda ayrılmış yok hata yükseltirBaşvurulan imleç değişken yoksa SQL Server harekete geçirilen başka bir türü. bildirilmemiş bir değişken için aynı hata yükseltir
Bir imleç değişken:
' % S'hedefi hedef bir imleç türü veya başka bir imleç değişken olabilir.Daha fazla bilgi için, bkz. set @ local_variable (Transact-SQL).
Şu anda atanmış bir imleç imleç değişkeni yoksa, bir çıktı imleç parametresi execute deyim hedef olarak başvurulabilir.
imleçbir işaretçi olarak sayılması.imleç değişkenleri hakkında daha fazla bilgi için bkz: Transact-sql İmleçler.
Örnekler
A.declare kullanarak
Aşağıdaki örnek, adlı bir yerel değişken kullanır @find tüm soyadlarını başlayarak için kişi bilgilerini almak için Man.
USE AdventureWorks2008R2;
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 iki değişkeni ile kullanma
Aşağıdaki örnek adlarını alır Adventure Works Cycles Satış temsilcileri kim Kuzey Amerika satış bölgesi içinde bulunan ve sahip en az $2,000,000 satış için yıl.
USE AdventureWorks2008R2;
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.tablotürü bir değişken bildirme
Aşağıdaki örnek oluşturur bir table Çıkış yan tümce update deyimiçinde belirtilen değerleri depolar değişken.İki SELECT deyimlerini izleyin değerleri dönmek @MyTableVar ve güncelleştirme işlemi sonuçlar Employee tablo.Unutmayın sonuçlar INSERTED.ModifiedDate sütun farklı değerler ModifiedDate sütun Employee tablo.Çünkü AFTER UPDATE Tetikleyici, değerini güncelleştirir ModifiedDate Geçerli tarihiçin tanımlanan Employee tablo.Ancak gelen sütunları döndürülen OUTPUT tetikleyicileri harekete geçirilmeden önce verileri yansıtacak.Daha fazla bilgi için, bkz. output yan tümcesi (Transact-SQL).
USE AdventureWorks2008R2;
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ı tanımlı tablo türünde bir değişken bildirme
Aşağıdaki örnek, bir tablooluşturur-valued parametre veya tablo değişkeni adı verilen @LocationTVP.Bu adı verilen karşılık gelen bir kullanıcı tanımlı tablo türü gerektirir LocationTableType.Kullanıcı tanımlı tablo türü oluşturma hakkında daha fazla bilgi için bkz: Tür (Transact-SQL) oluştur.tablohakkında daha fazla bilgi için-valued parametreleri için bkz: Tablo değerli Parametreler (veritabanı altyapısı).
DECLARE @LocationTVP
AS LocationTableType;