Veri türleri,
numara, resim, tarih gibi bir sütunda veya bir değişkende depolanabilen türdeki
bilgiyi belirtirler. SQL Server 28 "sistem tanımlı" veri türünü tanır. Bu veri
türleri haricinde, belirli ihtiyaçları karşılayabilmeniz için kullanıcı tanımlı
veri türlerini T-SQL ve .NET ile yaratabilirsiniz.
Sistem tanımlı veri türleri kategorileri:
* Karakter Dizilimi (Character strings)
* Unicode karakter dizilimi (Unicode character strings)
* Tarih ve saat (Date and time)
* Tahmini sayısal (Approximate numeric)
* Kesin sayısal (Exact numeric)
* Tamsayılar (Integer numbers)
* Parasal (Monetary)
* Çift değişkenli (Binary)
* Özel (Special)
Bazı durumlarda, bir veri türünü T-SQL kodda ilişkilendirmek için farklı
tanımlayıcılar/tanıtıcılar kullanabilirsiniz. Örneğin; Char veri türü Karakter
olarak, varchar ise karakter çeşitliliği olarak ele alınabilir. Bu eş anlamlı
sözcüklerin bazıları ANSI SQL-92 standart gereksinimlerine dayanmaktadır.
Karakter Dizilimleri
Karakter veri türleri karakter
dizilimlerini içerir. Dört farklı karakter türü, uzunlukları ve depolama
özellikleri açısından çeşitlilik gösterirler.
* char
* varchar
* varchar(max)
* text
Char veri türü, sabit boyuttaki dizilimleri depolamak için kullanılır. Daha
önce belirtildiği gibi, bu veri türünün maksimum uzunluğu/boyutu 8,000
karakterdir ki bu, eski versiyonlardaki 255 karakter limiti bağlamında kayda
değer bir artıştır. Bir değişken veya bir tablo sütunu nominal boyutundan daha
kısa boyuttaki bir dizilimle atanmışsa, bu değişken belirli alan uzunluklarını
doldurmak için ardındaki boşluklarla tıkanmıştır.
Varchar veri türü 8,000 karakter uzunluğa kadar olan çeşitli boyutlarda
dizilimleri depolar. Uzunluğu nominal boyuttan az olan karakter değeri bir
sütuna veya bir değişkene atandığında SQL Server peşinden boşluklar eklemek
yerine onu olduğu gibi kaydeder. Varchar veri türleri dizilimin uzunluğunu
kaydetmek için 2 ilave byte kaplar/tutar.
text veri türü büyük miktarlardaki datayı depolamak için
kullanılır. Tek bir alan 2GB (231 - 1 byte) bilgiye kadar depolayabilir. Sadece
16 byte pointer tabloda depolanır. Bu nedenle ilave işlem, metin sütunlarının
kullanımıyla ilişkilendirilir. Metin değerleri işlemi için bazı özel
fonksiyonlar bulunmaktadır.
Not
text veri türlerini kullanmaktan kaçının çünkü Microsoft, SQL
Serverın gelecek versiyonlarında bunu kaldırmayı planlamaktadır. Onun yerine
yeni varchar (max) veri türü kullanılmalıdır.
Varchar (max), varchar veri türü gibi görünür ve işler ancak dahili yapı ve
işlevselliği daha çok metin veri türü gibidir.
Aynı zamanda 2 GBa kadar olan geniş dizilimleri depolamak için tasarlanmıştır.
Dizilim, kaydın geri kalanıyla veri sayfasında değil özel veri sayfalarında
depolanır. Bunun en büyük avantajı varchar ile çalışan çoğu dizilim operasyon
fonksiyonunun aynı zamanda varchar (max) ile de çalışmasıdır; bununla birlikte
ilave işlevsellik için birkaç yeni fonksiyon bulunmaktadır. Aşağıdaki komut
farklı karakter dizilimi veri türlerini kullanan dört alanlı bir tablo yaratır:
Create
tableContacts(ContactId
char(8),
Name
varchar(50),
Note
text,
Resume
varchar(max))
|
Karakter sabitleri
kotalarla Transact-SQLden geri kalanından sınırlandırılır. Örneğin; aşağıdaki
ifade contact bilgisi girer:
insert into Contacts (Contactld,
Name,
Note, Resume)
values
(
CO-92-
81
,
Tom
Jones
,
[email protected]
,
N/a
)
|
Unicode Karakter Dizilimleri
Microsoft Sql Server 2005 non-ASCII karakter
setleri kullanan Unicode datayı depolamak için dört karakter veri türüne
sahiptir. Bunlar char, varchar, varchar (max) ve metin veri türlerine
eşdeğerdir ve aşağıdaki gibi adlandırılırlar:
* nchar
* nvarchar
* nvarchar(max)
* ntext
Bu yeni veri türleri ile eski veri türleri arasındaki fark; yeni veri
türlerinin karakter başına 2 byte kaplayan Unicode karakterlerini
tutabilmeleridir. Bu nedenle, depolayabildikleri maksimum dizilim uzunluğu,
eski veri türlerindekinin yarısıdır. (4,000 for nchar and nvarchar).
Aşağıdaki ifade önceki örnekteki ile aynı tabloyu yaratır ancak Unicode veri
türlerini kullanır.
Create table Contacts_2(ContactId nchar(8),
Name nvarchar(50),
Note
ntext,
Resume
nvarchar(max))
go
|
Unicode karakter
sabitleri aynı zamanda kotalarla sınırlandırılır ancak ön ek olarak N konulur.
insert into Contacts_2 (Contactld,
Name,
Note, Resume)values (NCO-92-
81, NTom
Jones, N[email protected], NN/a}
|
Bu N öneki biraz
garip gözükebilir ancak buna alışacaksınız. Microsoft belgeleme, Unicode
sabitleri örnekleriyle doludur. Bir süre önce Microsoftun neden N i ön ek
olarak kullandığını keşfettim. "National" (Ulusal) kelimesini temsil
etmektedir. Ayrıca bu veri türleri için kabul edilebilir diğer alternatif
tanımlayıcılar;
* National char
* National char varying
* National char varying (max)
* National text
Not
Belirgin olarak, N önekini sabitlerde kullanmaktan kaçınmanız sorun
değildir. SQL Server dizilimleri otomatik olarak Unicode eşdeğerine çevirir.
Tabii ki Unicode sütunları ve değişkenleriyle uğraşırken N eklemek daha iyidir
ancak eklememek de büyük bir sorun yaratmaz. Sadece CPU kendiliğinden
gerçekleştirilecek bu çevirme işlemi için ekstra devre yapmak durumunda
kalacaktır.
Bununla birlikte N eklememenin probleme dönüşeceği durumlar da bulunmaktadır.
Dizilim sabitiniz sorgu ölçütlerin parçasıysa bu durumda N önekinin varlığı
sorgulamanın uygulanışını belirgin ölçüde etkileyecektir. Eğer sütun
non-Unicode olarak tanımlanmış ve ölçüt N ön ekiyle belirtilmişse SQL Server
tablonun her sırasını Unicode sabitiyle karşılaştırmak için değiştirecektir.
Sonuç olarak sorgulama, indexi kullanmak yerine tablo taraması yapacaktır.
Tarih Ve Saat Veri Türleri
SQL Server tarih ve saati depolamak için iki T-SQL veri
türünü destekler:
* datetime
* smalldatetime
Bu iki veri türü arasındaki fark kapladıkları alandır; datetime 8 byte,
smalldatetime sadece 4 byte kullanır. Aralarındaki diğer farklar ise depolanan
tarihin doğruluğu/kesinliği ve kullanılabilecek tarihlerin genişliğidir.
Smalldatetimeın doğruluğu bir dakikadır ve 1 Ocak 1900den 6 Haziran 2079a
kadar olan zamanı kapsar ki bu da yeterinden fazladır. Datetimeın doğruluğu
3.33 milisaniyedir ve 1 Ocak 1753ten 31 Aralık 9999a kadar olan süreyi
kapsar.
Tarih ve saat sabitleri, karakter diziliminde olduğu gibi Transact-SQLde kota
sınırlamalarıyla yazılır:
update
Contacts_2 Set DateOfBirth = 2/21/1965 10:03 AM where ContactId = CO-92-
81
|
Not
SQL Server bir çok değişik tarih ve saat formatını desteklemektedir.
Convert
fonksiyonu tarih ve saat fonksiyonlarının formatını kontrol eden bir parametre
kabul eder.
Eğer bir sabitte zaman belirtilmemişse SQL Server otomatik varsayılan değer
olarak geceyarısı 00:00ı atar. SQL Serverın saati bu veri türlerinin bir
parçası olarak kaydettiğini aklınızda bulundurmalısınız. Bu nedenle özel tek
bir günde doğmuş kontaktlarınızı seçmek isterseniz aşağıdaki gibi bir şey
kullanmamalısınız:
select
*
from
Contacts_2 where DateOfBirth = 2/21/1965
|
Bu ifade, o günün
geceyarısına ayarlanmış DateOfBirthlü kayıtları seçip alacaktır. Alanda
değerleri kaydeden diğer uygulamalar da aynı hatayı yapsaydı bu kabul
edilebilir bir çözüm olabilirdi. Aşağıdaki daha uygun bir çözümdür:
select
*
from Contacts_2 where DateOfBirth
>= 2/21/1965 and
DateOfBirth =< 2/22/1965
|
Tam Sayılar
SQL Server 1-, 2-, 4-, and 8-byte tamsayıları destekler. Bit veri türü
mantıksal doğru ve yanlış değerleri temsil eden 1 ve 0 depolamak için
kullanılır. Aşağıdaki tablo tamsayı veri türlerini, depolama boyutlarını ve
değerlerin aralığını listeler:
Data Type |
Storage Size |
Minimum
|
Maximum |
int |
4 bytes |
-2, 147, 483, 648 (-2G) |
s2, 147, 483, 647(26?1) |
smallint |
2 bytes |
-32768 (-32Ks) |
32767 (32K-1) |
tinyint |
1 bytes |
0 |
255(28-1)
|
bigint |
8 bytes |
-9,223,372,036,854,775,808 (-263) |
9,223,372,036,854,775,807 (263-1) |
bit |
1 bit |
0 |
1 |
int veri türleriyle ilgili en
güzel şey küçük alanda oldukça fazla sayı depolayabilmesidir. Bu nedenle sık
sık anahtar değerler (key values) için kullanılırlar. Ana anahtarın veri türü
int ise tablo dört milyara kadar kayıt depolayabilir ki miktar herhangi bir
amaç için oldukça yeterlidir. Bu nedenle tablonuzun boyutundan emin değilseniz
ana anahtar olarak int kullanın.
Not
Depolama (warehousing) sistemleri giderek büyüyor ve aynı zamanda iki
milyardan fazla tamsayı kullanabilen dağıtımı yapılmış database
uygulamaları/yürütmeleri de bulunmaktadır. Bu durumlarda ana anahtar olarak
bigint kullanabilirsiniz.
Tamsayı sabitleri sınırlayıcıya gereksinim duymaz:
update
Inventory Set StatusId = 3, Operational = 0 Where InventoryId = 3432
|
Tahmini / Yaklaşık Sayılar
Ondalık sayılar genellikle tek veya
çift kesinlik (single and double precision) olarak da bilinen real ve
float veri türlerinde depolanır. Fazla yer kaplamamaları ve geniş
aralıkta sayıları tutabilmeleri avantajdır. Tek sorun şudur ki; kati/kesin
değillerdir. Yaklaşık olarak orijinal ondalık sayıya eşdeğer yaklaşık/tahmini
ama kesin olamayan sayının çift değişkenli temsilini depolarlar.
Kesinlik/Doğruluk (Precision) numaradaki önemli/karakteristik basamak/hanelerin
sayısı ve Scale ondalık noktanın sağa doğru uzanan basamak/hanelerin sayısıdır.
Örneğin; 123456.789 sayısının 9 doğruluğu ve 3 scalei vardır. Gerçek sayıların
basamakları 7ye kadardır ve float sayıların precisionı 15 basamağa kadardır.
Bu nedenle, Dünya ve Ay arasındaki mesafeyi ölçerken birkaç metrenin
önemsenmeyeceği bilim ve mühendislik için idealdirler. Fakat şirket bütçesinin
son kuruşuna kadar kesin olması gereken finansal endüstri için yeterli
değillerdir.
Matematikte 234,000,000,000 sayısını kaydetmek için 234xl09 ve Transact-SQLde
234E9 kullanabilirsiniz. Bu, Scientific Notation (Bilimsel İşaretleme) olarak
bilinir. Eden sonraki sayı exponent (kuvvet), Eden önceki sayı mantissa
(logaritmanın ondalık kısmı) olarak adlandırılır. Bu işaretleme küçük sabitleri
depolamak için de kullanılır. Matematikte 0.000000000234, 0.234x109 olarak
yazılabilir ve Transact-SQLde 0.234E-9 olarak yazılabilir.
SQL Server bu sayıları depolamak için IEEE 754 standartını kullanır. Float veya
gerçek bir değişken ve sütun bir sayıya atandığı zaman SQL Server önce ondalık
sayıyı onun çift değişkenli temsiline çevirir. Bu çevirme işlemi , bu
değerlerin ondalık versiyona eşitliğinde kesin değil yaklaşık olmasına
sebeptir. Bu nedenle Yaklaşık Sayılar (approximate numbers) olarak anılırlar.
Bu yüzden bu tarz iki sayı arasındaki dengeye güvenmemelisiniz. Kullanımlarını
Where clauses to < and > operatörlerinde sınırlandırmalı ve =
operatörünün kullanımından kaçınmalısınız.
Exact Numbers
Ondalık veya sayısal veri türleri sayıları depolarken
yaklaşıklık/tahmini kullanmazlar. Ne yazık ki gerçek ve float veri türlerine
göre daha fazla yer/alan gerektirirler. Ondalık bir sütun veya değişken
tanımlandığında/belirtildiğinde basamağını ve doğruluğunu (scale and precision)
belirtmelisiniz.
SQL Server maximum 38 doğruluktaki sayıları depolayabilir. Basamak (scale)
doğruluktan daha az ya da onunla eşit olabilir.
Aşağıdaki örnekte ağırlık ve yükseklik sütunlarının precisionı 5, scalei
2dir. Sütunlar ondalık noktadan sonra 2 basamağa kadar ve ondalık noktadan
önce 3 basamağa kadar olabilir.
Create table Patient (PatientId int,
FullName
varchar(BO),
Weight
decimal(5,2),
Height
decimal(5,2),
ADP
smallint,
BDZ
tinyint)
go
|
Ondalık sabitlerin de sınırlamaya gereksinimi yoktur:
insert into Patient (Patientld,
FullName, Weight, Height,
ADP, BDZ)
values (834021, Tom Jones,
89.5, 188.5, 450, 11)
|
Parasal Veri Türleri
Money and smallmoney veri türleri
ondalık sayıların precionları ve küçük boyuttaki gerçek sayılar arasındaki
uzlaşma/orta yoldur. Smallmoney 4 byte kaplar ve int sayılar gibi aynı dahili
yapıyı kullanır. Veri ondalık noktadan sonra dört basamağa kadar olabilir. Bu
nedenle --214,768.3648 ile 214,768.3647 aralığındaki sayıları smallmoney veri
türünde depolayabilirsiniz. The Money veri türü bilgiyi yerleştirme için the
bigint veri türüyle aynı yapıyı kullanır. Depolama için 8 byte kullanır, o
yüzden değerleri -922,337,203,685,477.5808 ile +922,337,203,685,477.5807
arasında olmalıdır.
Parasal sabitler den önce $ veya diğer 18 para sembolünden biri gelebilir (SQL
Server Books OnLineda listelenmişlerdir):
update
Inventory_2
Set Rent = $0,
LeaseCost
=
$119.95
Where InventoryId = 3432
|
Binary Veri Türleri
Binary veri tipleri bitlerin diziliminin yerleştirilmesi için kullanılır. SQL
Server dört temel çift değişkenli veri tipini, karakter veri türü ile benzer
nitelikleri desteklemektedir:
* binary
* varbinary
* varbinary(max)
* image
Binary and varbinary veri türleri 8,000 byte bilgi ve resim, varbinary (max) 2
GB veri depolayabilir. Aşağıdaki iki çift değişkenli tablo örneği
bulunmaktadır:
CREATE TABLE MyTable (
Id
int,
BinData
varbinary(8000),
Diagram
varbinary(max))
go
|
Çift değişkenli sabitler olarak
yazılır bit diziliminin onaltılık simgeleriyle yazılır ve ön ek olarak Ox
(sıfır ve x) kullanılır:
Update
MyTable
Set BinData = Ox82A7210B
where Id = 121131
|
SQL Server 2005in yeni ve özgün
bir özelliği de bir dosyayı okumayı ve onu varbinary (max) sütuna rowset olarak
yüklemeyi sağlayan yeni BULK OLE DB ile çalışan OPENROWSET() fonksiyonudur.
UPDATE dbo.MyTable
SET Diagram = (SELECT *
FROM
OPENROWSET
(
BULK
C:\My Pictures\desktop.bmp
,
SINGLE_BLOB)
AS
a
}
where Id = 121131
|
Özel Veri Türleri
timestamp : T
imestamp veri türü tarih ya da saat bilgilerini yerleştirmek için değil, daha
çok kaydın versiyon numarası olarak işleyen çift değişkenli değerler için
tasarlanmıştır. Değer, kayıt her güncellendiğinde güncellenir ve değer
databasede tektir. Optimistik kilitleme uygulaması için kullanılır. Tabloda
sadece bir alan timestamp değer olarak tanımlanabilir. 8 byte kaplar.
uniqueidentifier :
Uniqueidentifier veri tipi 16 byte çift değişkenli değer
depolar. Bu değerler genellikle globally unique identifiers (GUIDs) olarak
anılırlar. Sistem yeni bir GUIDs değer oluşturduğunda aynı değerin ne aynı
bilgisayarda ne de dünyadaki herhangi başka bir bilgisayarda tekrar
üretilemeyeceği garantidir. GUIDs network kartının kimlik numarasını ve
bilgisayarın saatinden elde edilen eşsiz bir numara kullanarak oluşturulur.
Network kartlarının yapımcıları network kartı kimlik numarasının gelecek 100
yılda tekrarlanmayacağını garanti ederler.
Uniqueidentifier sabiti genellikle aşağıdaki gibi sunulur;
* Character string {}
* Binary constant Oxaf16a66f7f8b31d3b41d30c04fc96f46
Yine de bu tarz değerleri çok nadir gireceksiniz. Transact-SQLde GUIDs, NEWID
fonksiyonu kullanarak oluşturulmalıdır. Aynı zamanda bir client uygulamanın
GUID değer üretmek için kullanabileceği Win32 API fonksiyonu bulunmaktadır.
uniqueidentifier değerler web uygulamaları ve dağıtılmış database sistemleri
için sık sık kullanılır. Web uygulamalarında, tasarımcılar kayıt databasee
gönderilmeden önce eşi olmayan bir tanıtıcı/kimlik oluşturmak için
uniqueidentifier veri tipini kullanabilirler. Distributed sistemlerde ise bu
veri türü eşi olmayan tanıtıcı/kimliklere hizmet eder.
Xml :
Xml veri türü SQL Server 2005in en temel yeni özelliğidir. Xmlin girişinden
önce kullanıcılar XML dökümanları dizilimler ya da çift değişkenli datalar
oalarak depoluyordu. Bu yeni veri türü, SQL Serverın XML sütununa
yerleştirilen XML dökümanını ayrıştırmasına ve kullanıcının sütunla
bağladığı/birleştirdiği şema ile uyumlu olduğunu doğrulamasına izin
vermektedir.
Aynı zamanda kullanıcının XQuery dilinde xml sütundaki dataya karşı sorgulama
yapması için de faydalıdır. (örneğin, belirgin özellik/sembol ve elementlerde
belli özel değerleri olan XML dökümanlar içeren dizileri bulmak için). Xml
sütunları, özelliklerini ve elementlerini indexleyebilmek çok heyecan verici,
böylece makine tablo ve sütun taramaları yapmak zorunda değil.
Bununla birlikte, ilave özelliklerden başka, xml veri türü varchar (max) veri
türüne dayanmaktadır ve bu yüzden 2 GB limiti vardır. Aşağıdaki örnekte xml
sütunlu bir table yaratılmaktadır:
Create table dbo.Eq2(
EqId
int,
EqCompList
xml)
|
Kotaları XML sabitleri
etrafındaki sınırlayıcılar olarak kullanmalısınız:
INSERT INTO dbo.Eq2(Eqld, EqCompList}
VALUES(123,<CompList><CZ101/><AZ401/><BZ407/x/CompList>}
|
sql_variant :
sql_variant veri tipi Visual Basicteki veri türü değişkeni ile aynı
düşünceye dayanmaktadır. Tek bir değişken, sütun veya parametrenin farklı veri
türlerine değer yerleştirmesine izin vermek için tasarlanmıştır.
Değişken objeler iki değer kaydederler:
* Gerçek değer (the actual value)
* Değişkeni tanımlayan metadata (The metadata describing the variant): base
veri type, maximum size, scale, precision, and collation
Aşağıdaki ifade farklı türlerde değerler yerleştiren bir lookup table
oluşturmaktadır:
Create table Lookup(
LookupGroupId
tinyint,
LookupId
smallint,
LookupValue
sql_variant)
Go
|
SQL Server 2000den önce, farklı
veri türlerinin lookup değerlerini yerleştirmek için bir alandan fazlasına
gereksinim vardı
Aşağıda bir sütuna değerlerin farklı türlerini nasıl yerleştireceğiniz
canlandırılıyor:
Insert Lookup (LookupGroupId, Lookupld,
LookupValue)
Values (2, 34, VAR)
Insert Lookup (LookupGroupId, Lookupld,
LookupValue)
Values (3, 22, 2000)
Insert Lookup (LookupGroupId, Lookupld,
LookupValue)
Values (4, 16, 1/12/2000)
Insert Lookup (LookupGroupId, Lookupld,
LookupValue)
Values (4, 11, $50000)
|
Bir
sql_variant objesi
aşağıdakiler haricindeki diğer herhangi bir datayı depolayabilir:
* text
* ntext
* image
* varchar(max)
* nvarchar (max)
* varbinary (max)
* timestamp
* sql_variant
* any user-defined veri types
Ancak kullanımlarında daha ciddi kısıtlamalar bulunmaktadır:
* sql_variant columns 8,016 byte ile sınırlıdır.
Sql değişken sütunları eğer anahtardaki datanın toplam uzunluğu 900 bytetan
kısa ise indexlerde ve unique anahtarlarda kullanılabilir. Bununla birlikte bu,
sql_variant veri tipinin sınırlaması değildir. Indexler toplamda 900 bytetan
büyük olan sütunlar üzerine dayandırılamaz.
* sql_variant columns kimlik mülkiyetine sahip olamazlar.
* sql_variant columns hesaplanmış sütunların parçası olamazlar.
* sql_variant objectsten diğer veri tipi objelerine değer atarken veri
türlerini convert etmek için fonksiyonları kullanmalısınız.
* sql_variant değerleri karşılaştırmasının karmaşık kuralları vardır ve
errorlere eğilimlidirler.
* OLE DB Provider for SQL Server 7.0 kullanan client uygulamalar ile veya SQL
Server ODBC Driver from SQL Server 7.0 ile giriş yapıldığında sql_variant
değerleri otomatik olarak nvarchara (4000) çevrilir. SQL Server sadece ilk
4,000 karakteri raporlayacaktır.
* SQL Server ODBC Driver from SQL Server 6.5 veya önceki versiyonları ile
DB-Library kullanan client uygulamalar ile giriş yapıldığında sql_variant
değerleri otomatik olarak nvarchara (255) çevrilir. Eğer depolanan değerler
255 karakterden uzunsa SQL Server sadece ilk 255 karakteri raporlayacaktır.
* Sql_variant sütunlar Like doğrulamada desteklenmez.
* sql_variant sütunlar full metin indexleri desteklemez.
* sql_variant objects, depolanan değerler dizili veta numeric olsa bile +
operator kullanarak sıralanamaz. Uygun çözüm sıralamadan önce değerleri
dönüştürmektir.
* Bazı fonksiyonlar -Avg(), Identity(), IsNumeric(), Power(), Radians(),
Round(), Sign(), StDev(), StDevP(), Sum(), Var(), VarP() - sql_variant
parametrelerini desteklemez.
Not
sql_variant veri türünü kullanırken oldukça dikkatli olmalısınız.
Kullanımı ciddi performans ve tasarım uygulamaları içermektedir.
table : table veri türü
sonraki süreçlerde recordset yerleştirmek için kullanılır. Bazı açılardan bu
veri türü geçici tablo (temporary table) ile benzerdir. Bu veri türünü sütun
tanımlamak için kullanamazsınız. Sadece fonksiyonun değerini geri döndürmek
için local değişken olarak kullanılabilir.
Cursore Veri Türü
Bu, imleçe dair referanslar içeren özel bir veri türüdür. İmleçler
kayıtlar üzerinde operasyona izin veren yapılar programlıyor. Bu türden bir
sütun tanımlamak mümkün değildir. Bu sadece değişkenler ve depolanmış prosedür
output değerler için kullanılabilir.
Transact-SQL Kullanıcı Tanımlı Veri Türleri
Veritabanında klasik veri tipleri
tanımlayabilirsiniz. Geleneksel kullanıcı tanımlı veri türleri Transact-SQL de
tanımlanır.
SQL Server 2005te kullanıcı tanımlı veri türlerini .NET te tanımlamak da
mümkündür. Bu yeni türler sistem tanımlı veri türüne dayanır ve sadece
tanımlandıkları databaseden erişilebilirler. Onları Enterprise Managerdan veya
sistem tanımlı procedure
sp_addtype
kullanarak tanımlayabilirsiniz:
Exec sp_addtype Phone, varchar(20), NOT NULL
Exec sp_addtype typPostalCode, varchar(V), NULL
|
İlk parametre yeni veri türünün adıdır;
ikinci parametre dayandığı sistem tanımlı veri türüdür; ve üçüncü parametre
yeni veri türünün nullabilitysini tanımlar. Komut gerçekleştirildiğinde server
mevcut databasein sys.systype sistem görüntüsüne türü ekler.
Yeni türler timestamp haricindeki herhangi bir sistem tanımlı türe
dayandırılabilir.
Not
Kullanıcı tanımlı veri türlerinin büyüleyici bir özelliği ; database
içinden tek bir adımla değiştirebilmenizdir. Örneğin; 19,6 ondalık sayısının
sizin parasal değerleriniz için yeterince büyük olmadığına karar verdiniz, bunu
2 8,13 ondalık sayısıyla değiştirebilirsiniz. Veri tipini ilk değiştiren
scripti çalıştırıp ardından onu referans gösteren tüm database objectlerini
yeniden yaratabilirsiniz. Bu özellik databasein gelişim aşaması boyunca
oldukça faydalıdır. Ne yazık ki bir database halihazırda üretim aşamasındaysa,
tablolar veri içerir ve bu özellik çok daha karmaşık hale gelir.
Microsoft SQL Server tasarımcıları serverla birlikte özel bir veri türü dahil
ettiler: sysname. Transact-SQL tanıtıcılarının (identifier)
uzunluğunun kontrolü için kullanılır. Server default moda çalıştığında bu türün
uzunluğu 128 karaktere ayarlanır. Uyumluluk seviyesi 65 veya 60a
ayarlandığında uzunluk 30 karaktere çekilir/kısaltılır. Bunu Transact-SQL
tanıtıcıları içerecek sütun ve değişkenleri tanımlayacağınız zaman
kullanmalısınız.
Kaynak Microsoft SQL Server 2005 Stored Procedure Programming in T-SQL &
.NET, Third Edition by Dejan Junderi
Makale:
SQL Server 2005 Veri Tipleri ADO.NET ve SQL İsmail Yurtsever
|