SQL Server administration and T-SQL development, Web Programming with ASP.NET, HTML5 and Javascript, Windows Phone 8 app development, SAP Smartforms and ABAP Programming, Windows 7, Visual Studio and MS Office software
Development resources, articles, tutorials, code samples, tools and downloads for ASP.Net, SQL Server, Reporting Services, T-SQL, Windows, AWS, SAP HANA and ABAP

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
Code

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
Code

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
)
Code

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
Code


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
Code

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
Code

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
Code

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.



SQL Server

SQL Server 2019 Installation
download SQL Server 2019
download SQL Server 2017
download SQL Server 2016
download SQL Server 2014
download SQL Server 2012
MacOS ve SQL Server 2019


Copyright © 2004 - 2021 Eralper YILMAZ. All rights reserved.