Yukon ile Gelen Yeni Veri Tipleri
Large Value Data Types
MS SQL Server 2005 BETA 2 (Yukon) ile gelmiş olan yeniliklerden birisi de Large Value Data Types yani Büyük Değerli Veri Tipleri olarak adlandırabileceğimiz varchar(max), nvarchar(max), varbinary(max) veri tipleridir.
MS SQL Server 2000 ile çalışırken çoğu zaman sıkıntısını çektiğimiz konulardan birisi de varchar ve nvarchar veri tiplerinin yetersiz kalmalarıydı. Bu veri tiplerinin depolayabilecekleri veri miktarı varchar için maksimum 8000 karakter iken nvarchar için yarıya düşerek 4000 karakter ile sınırlıydı. Daha büyük veri tiplerine ihtiyaç duyduğumuzda kullanabileceğimiz tek veri tipi text ve ntext veri tipleriydi. Text ve Ntext veritipleri ile 2 GB ve 1 GB veri depolama imkanımız vardı.
Ancak bu büyüklükteki veriler ile işlem yapmak veri büyüklüğü nvarchar ve varchar veri tipleri için tanımlanmış maksimum büyüklükleri aştığında pek çok bakımdan sınırlandırılmıştı.
Örneğin, kullandığınız tabloda ntext veritipinde bir kolon var ve bu
kolondaki verinin büyüklüğünü LEN() fonksiyonunu kullanarak öğrenmek
istediniz.
SELECT LEN(Kolon2) FROM LVDT
Bir varchar veya nvarchar için kullanacağımız sql cümleciği yukardaki gibi olacakken, LEN() fonksiyonu ile ntext (veya text) tipinde bir kolonun büyüklüğünü ölçmeye kalktığımızda aşağıdaki hata iletisi ile karşılaşırız.
Server: Msg 8116, Level 16, State 2, Line 1
Argument data type ntext is invalid for argument 1 of len function.
Bu hata da LEN() fonksiyonu için ntext veri tipinin geçerli bir argüman olmadığı bildiriliyor.
Gerçekten de text ve ntext veritipleri üzerinde string işlemleri yapamayız. İkinci bir örnek de iki metin değeri birbirine ekleme işlemidir.
SELECT 'Kolon2 : ' + Kolon2 FROM LVDT
Yukarıdaki işlemle "Kolon2 : " metni ile tablomuzdaki Kolon2 değerlerini yanyana getirerek yazmak hedeflenmiş. Yine varchar ve nvarchar veritipleri için sorunsuzca çalışacak olan bu sorgu text ve ntext veri tipindeki bir kolon da aşağıdaki hatayı verecektir.
Server: Msg 403, Level 16, State 1, Line 1
Invalid operator for data type. Operator equals add, type equals ntext.
MS SQL Server 2005 BETA 2 (Yukon) ile gelmiş olan yeniliklerden birisi de Large Value Data Types yani Büyük Değerli Veri Tipleri olarak adlandırabileceğimiz veri tipleridir. Bu veritipleri MAX belirteci ile kullanılarak VARCHAR(MAX) ve NVARCHAR(MAX) şeklinde tanımlanırlar.
Örneğin bir SQL Server 2005 veritabanında aşağıdaki script ile LVDT adında bir tablo oluşturabiliriz.
CREATE TABLE LVDT (
id int IDENTITY (1, 1) NOT NULL,
kolon1 nvarchar (50) NULL,
kolon3 nvarchar(max) NULL,
kolon2 ntext NULL
)
Sp_Help komutu ile yeni oluşturduğumuz tablonun yapısına baktığımızda aşağıdaki tablodan görebileceğimiz gibi nvarchar(max) olarak tanımladığımız kolonun uzunluğu -1 olarak görülüyor.
SP_HELP LVDT
| Column_name | Type | Computed | Length | Prec | Scale | Nullable | TrimTrailingBlanks | FixedLenNullInSource | Collation |
| id | int | no | 4 | 10 | 0 | no | (n/a) | (n/a) | NULL |
| kolon1 | nvarchar | no | 100 | yes | (n/a) | (n/a) | Latin1_General_CI_AS | ||
| kolon3 | nvarchar | no | -1 | yes | (n/a) | (n/a) | Latin1_General_CI_AS | ||
| kolon2 | ntext | no | 16 | yes | (n/a) | (n/a) | Latin1_General_CI_AS |
Yeni veritipinde ( NVARCHAR(MAX) ) tanımlanmış olan kolonumuz üzerinde artık LEN() fonksiyonunu kullanabiliriz.
SELECT LEN(Kolon3) FROM LVDT
Uzunluk
--------------------
46
7232
14464
(3 row(s) affected)
Gördüğünüz gibi NVarChar(Max) yeni Large Value Data Type veri tipi kullanımı ile birlikte 4000 ve 8000 karakterlik sınırları geride bırakmış oluyoruz.
nvarchar(max) veya varchar(max) veritipleri de normal string işlemlerinde kullanılabilirler. Aşağıdaki örnekte olduğu gibi Large Value Data Type tipindeki kolonumuz Kolon3 sabit bir metin ile birleştirilerek SELECT ifadesi ile kullanıcıya döndürülüyor.
SELECT N'Kolon 3 buradan başlıyor : ' + Kolon3 FROM LVDT
Aynı işlemi LVDT isimli tablomuzun Kolon2 isimli kolonuna uygularsak aşağıdaki hatayı alacağız.
Msg 402, Level 16, State 1, Line 1
Data types nvarchar and ntext are incompatible in add operator.
Aynı zamanda bu veri tipini değişken tanımlamada da benzer şekilde sorunsuzca kullanabiliriz.
DECLARE @lvdt AS NVARCHAR(MAX)
SELECT @lvdt = N'...........................' -- Buraya 1 GB büyüklüğe kadar bilgi girebilirisiniz.
SELECT 'Large Value Data Type değişkenimin karakter sayısı ' + STR(LEN(@lvdt)) + ' : ' + @lvdt
Large Value Data Types aslında Large Object Data Types (text, ntext ve image) veri tiplerinin yerini almış gözüküyor. LOB veri tipleri için sınır değerler olan 2^31 byte veri (unicode değerler için bu yarıya yani 2^30 karakter uzunluğa düşüyor) aynı zamanda Large Value Data Types tipindeki veriler için de sınır değerler. Muhtemelen sistemler SQL Server 2000 'den SQL Server 2005 sürümüne upgrade edilirken geçmiş versiyonlarla uyumluluğu sağlamak açısından LOB veri tipleri desteklenmeye devam ediliyor. Bence yeni veritiplerinin sağladığı olanaklar eskilerinin yeniden yeni veri tipleri şeklinde tanımlanması için yeterince çekici.
