T-Sql Veri Tipleri – Örnek ve Anlatımlı

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 GB’a 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-SQL’den 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’ , ’Tom@trigon.com’ , ’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 (N’CO-92- 81’, N’Tom Jones’, N’Tom@trigonblue.com’, N’N/a’}

Bu N’ öneki biraz garip gözükebilir ancak buna alışacaksınız. Microsoft belgeleme, Unicode sabitleri örnekleriyle doludur. Bir süre önceMicrosoft’un 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 1900’den 6 Haziran 2079’a kadar olan zamanı kapsar ki bu da yeterinden fazladır. Datetime’ın doğruluğu 3.33 milisaniyedir ve 1 Ocak 1753’ten 31 Aralık 9999’a kadar olan süreyi kapsar.
Tarih ve saat sabitleri, karakter diziliminde olduğu gibi Transact-SQL’de 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ış DateOfBirth’lü 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 scale’i vardır. Gerçek sayıların basamakları 7’ye 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-SQL’de 234E9 kullanabilirsiniz. Bu, Scientific Notation (Bilimsel İşaretleme) olarak bilinir. E’den sonraki sayı exponent (kuvvet), E’den ö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.234×109 olarak yazılabilir ve Transact-SQL’de 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, scale’i 2’dir. 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 OnLine’da listelenmişlerdir):

update Inventory_2Set 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 MyTableSet BinData = Ox82A7210B

where Id = 121131

SQL Server 2005’in 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.MyTableSET 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-SQL’de 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 database’e 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 2005’in en temel yeni özelliğidir. Xml’in 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 Basic’teki 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 2000’den ö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 objects’ten 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 nvarchar’a (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 nvarchar’a (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 2005’te 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 Manager’dan 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 nullability’sini tanımlar. Komut gerçekleştirildiğinde server mevcut database’in 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 database’in 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 60’a 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.

Advertisements

2 Comments

Add yours →

  1. Arama motorlarında arama yaparken yazınızı buldum makaleleriniz dikkatimi çekti teşekkürlerimi sunarım

  2. Merhaba,
    bunları bir makaleden çok karşıma gelen sorunların çözümlerini yazdığım bir yer gibi düşünebilirsiniz.
    Sitede olmayıp da sizlerin karşılaştığı sorunları bana ileterek onları da siteye ekleyebiliriz.

    İlginiz için teşekkür ederim.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: