Makale Özeti

T-SQL SQL Server veritabanında veri sorgulamanızı ve veritabanını yönetmenizi sağlayan ifadeleri barındıran bir komut kümesidir. Daha önce birçok makalede T-SQL konusunu ve fonksiyonlarını incelemeye çalışmıştık...

Makale

T-SQL SQL Server veritabanında veri sorgulamanızı ve veritabanını yönetmenizi sağlayan ifadeleri barındıran bir komut kümesidir. Daha önce birçok makalede T-SQL konusunu ve fonksiyonlarını incelemeye çalışmıştık.

Bu makalede ise ele almayı planladığımız konu 7 Kasım 2005 tarihi itibariyle resmen uygulama geliştirme hayatımızın içerisinde yer almaya başlayan SQL Server 2005 versiyonu ile beraber gelen T-SQL yenilikleri olacak.

Bilindiği üzere SQL Server 2005 bizlere .Net CLR entegrasyonu sayesinde C#, VB.Net gibi programlama dilleri aracılığı ile

    - Stored Procedure
    - User Defined Function
    - User Defined Aggregate
    - User Defined Type
    - Trigger

yazma fırsatını veriyor. Bu C# dilinin esnekliğini kullanarak artık çok daha performanslı ve çok daha yönetilebilir SQL Server Programlama teknolojilerini kullanabileceğimiz anlamını taşıyor. Bunun yanında da akıllara şu soruyu getiriyor:

"T-SQL Ortadan Kalkıyor mu?"

Şüphesiz bu soru da bundan birkaç yıl önce "VB Ortadan Kalkıyor mu?" sorusuna verdiğimiz yanıtla aynı cevabı paylaşıyor. T-SQL hâlâ hayatımızda ve öylede olmaya devam ediyor olacak, tabiki günümüz teknolojisine ayak uydurmak suretiyle. Bu aşamada T-SQL tarafında özellikle .Net CLR entegrasyonu ile paralel bir takım komut setlerinin eklendiğini söylemek mümkün. "Create Assembly" gibi. Bunun tanında bildiğimiz manada T-SQL kodlarında da bazı güncellemeler ve yeni eklenen komut setleri mevcut. Şimdi bunları incelemeye çalışalım.


HATA YÖNETİMİ
SQL Server 2000 ve öncesi versiyonlarda karşımızda olan T-SQL'de "@@error" ifadesi bizim için birçok yerde hayat kurtarıcı olabiliyordu zira hatayı yönetebilmemizi sağlayan tek sistem fonksiyonuydu, lakin bununla beraber ihtiyaçlarımızı da tam olarak karşılayabildiği söylenemez. Bu aşamada aklımızdan geçirdiğimiz cümle hep C# veya VB.Net'tekine benzer bir hata yönetiminin olabilmesiydi.

SQL Server 2005 versiyonu ile beraber artık T-SQL sorgularınızda, Stored Procedure'lerinizde, vs Try...Catch olarak adlandırabileceğimiz gelişmiş hata yönetim bloklarını kullanabilirsiniz. Kullanım şekli :

Begin Try
    //Riskli Kod Bloklarınız
End Try
Begin Catch
   //Hata Oluşması Durumunda Çalışacak Kod Bloklarınız
End Catch


Örnek :

BEGIN
TRY
    SELECT 1/0

END
TRY
BEGIN CATCH
    SELECT ERROR_NUMBER() AS ERRORNUMBER ,ERROR_MESSAGE() AS ERRORMESSAGE, ERROR_SEVERITY() AS ERRORSEVERITY, ERROR_STATE() AS ERRORSTATE

END
CATCH;


 

TOP OPERATÖRÜ
Top operatörü T-SQL'in önceki versiyonlarında da kullanabildiğimiz, yazmış olduğunuz T-SQL Select ifadesinin istediğiniz adette kayıtlık bir diziyi veya kayıt dizisinin yüzdelik bir bölümünü ekrana getirmenize yarıyordu. Bu aşamada dilediğiniz oranı yazbiliyordunuz ancak parametrik bir ifade yazmanız mümkün değildi.

Top operatörü geçmiş özelliklerini aynen korumakla beraber artık parametrik sorgularda çalıştırabilmenizin yolunu açıyor.


Örnek :

Declare
@Sayi int
Set
@Sayi = 3
Select
Top(@Sayi) FirstName, LastName, Phone, ModifiedDate from Person.
Contact


 


ROWNUMBER
T-SQL'e yeni eklenen bir komut olan RowNumber bizler için kullanıldığı select ifadesinde her kayıt için unique bir rownumber ifadesi üretmesinin yanında özellikle SQL Server 2000'de zorlandığımız veri sayfalama işlemlerinide kolaylaştırmıştır.

Örnek 1:

SELECT ROW_NUMBER() OVER (ORDER BY FirstName) AS SıraNo, FirstName, LastName
FROM
Person.Contact
ORDER
BY FirstName



Örnek 2:

SELECT *
FROM
(Select ROW_NUMBER() OVER (ORDER BY FirstName) AS SıraNo, FirstName, LastName from Person.Contact) TEST
Where SıraNo Between 10 And 14


RANK - DENSE_RANK
RowNumber ifadesindeki gibi sıralama yapmanıza yarayan  bu temel komut sisteminin RowNumber'dan farkı aynı değere sahip alanlar için yaratılacak sıra numarasınında aynı olmasını sağlamasıdır.

Rank ve Dense_Rank arasındaki temel fark ise Rank'in kayıt sırasına göre Dense_Rank'in ise grup sırasına göre çalışmasıdır.

Örnek :

SELECT FirstName, LastName,
RANK() OVER(ORDER BY LastName DESC) AS Rank,
DENSE_RANK() OVER(ORDER BY LastName DESC) AS Dense_Rank
FROM
Person.Contact
ORDER
BY LastName
DESC


 


NTILE
Sorgu sonucunda seviyelendirme işlemi yapmanıza olanak tanır. Örneğin satın aldıkları ürün birim fiyatlarına göre siparişlerin sınıflandırılması gibi...

Örnek :

SELECT
SalesOrderID
, OrderQty, ProductID, UnitPrice,
NTile
(4) Over (Order By UnitPrice) As X
from
Sales.
SalesOrderDetail




Evren AYAN
Microsoft MVP - Connected System Developer
http://www.evrenayan.net