Anasayfa | Hakkımda | Kitaplarım | RSS Site içinde
Kategoriler
» SQL Server 2012
» SQL Server 2008
» C#
» MySQL
» Hayata Dair
» Güncel Haber-Duyuru
» Bir Soru Bir Cevap
» Oracle ve Diğer VTYS
» Java

Transact SQL’de SQL Server 2008 Yenilikleri-1

01.09.2008 22:00:00
SQL Server 2008 ile birlikte T-SQL dilindeki yeniliklerden, değişkenlere başlangıç değeri atanması, Bileşik operatörler ve Tablo Tipi ile ilgili iyileştirmeler ele alnmakta.

Transact SQL(kısaca T-SQL), SQL Server’a özgü SQL lehçesi olup, SQL Server üstünde sorgulamaların yapılabilmesi gibi basit amaçların yanı sıra, Stored Procedure’ler, fonksiyonlar, trigger’lar ve benzeri karmaşık veritabanı seviyeli program bileşenleri kodlamada kullanılan dildir.

Özellikle LINQ gibi ORM(nesne-ilişkilsel veri eşleşim) kütüphaneler yazılım dünyasında kullanılmaya başlandıkça T-SQL ile yazılan karmaşık kodları veritabanı seviyeli programatik öğelere kaydırmak neredeyse zorunluluk halini almakta. Böylece Veri katmanı ile iş katmanı arasındaki hatların daha keskin çizgilerle ayrıldığını söylemek mümkün.

Bu makalede, T-SQL dilinde ve kodlama ortamında SQL Server 2008 ile birlikte gelen yeniliklerden bir kısmını ele alacağız.

1.Değişkenlere Başlangıç Değer Ataması

T-SQL 2008’den itibaren herhangi bir değişkene tanımlandığı yerde başlangıç değeri atanabilir hale geldi. Diğer programlama dillerinden zaten alışık olduğumuz bu yöntemi artık T-SQL ile de kullanabileceğiz:

Örnek 1:

Şekil 1: Değişkenlere başlangıç değer atanabilmekte.


Şekil 2: SQL Server 2005 Beta-2’den itibaren kaldırılan intelli-sense desteği, SQL Server 2008 Management Studio ile tekrardan geliştiricilerin desteğine sunulmuş durumda. Management Studio ile T-SQL programları kodlarken, herhangi bir anda editör yardımı için, ctrl+space tuş bileşimini kullanabilirsiniz.

DİKKAT:
SQL Server 2008’den itibaren, satır sonlarını “;” ile bitirmeniz tavsiye edilmekte. İlerleyen sürümlerde, sonu noktalı virgül(;) ile bitmeyen ifadeleriniz sorun çıkartabilir.

2.Bileşik Operatör Desteği

T-SQL, 2008’den itibaren bileşik atama operatörlerine destek sağlamakta.

Örnek-2:

DECLARE @sayac INT=0;
SET @sayac +=7;
SELECT @sayac as arti7;
SET @sayac -=2;
SELECT @sayac as eksi2;
SET @sayac *=10;
SELECT @sayac as carpi10;
SET @sayac /=5;
SELECT @sayac as bolu5;
SET @sayac %=8;
SELECT @sayac as mod8;

Şekil-3:Bileşik Operatörlerin T-SQL’de kullanımı

T-SQL, şu an için artım(++) ve azatlım(--) operatörlerine destek sağlamamakta.

3. Tablo Tipi Değişkenler Hakkında

Tablo tipi değişkenler, SQL Server 2000’den bu yana destek verilen bir tip olmakla birlikte üstünde bir dize yenilikler yapılmış.

a)Toplu Değer Üretimi:

VALUES(…),(…)…..; kalıbı ile tablo tipinde değerler üretilebilmekte.

Örnek-3:

Şekil 4: Literal olarak verilen değerlerden tablo üretilmesi ve tablo tipinde bir değişkene eklenmesi. SQL Server 2008’deki yenilik, literallerin tablo gibi algılanmasıdır.

VALUES ifadesi ile elde edilen tabloyu başka amaçlar için de kullanabilirsiniz.

Örnek-4:

SELECT *
 FROM(
 VALUES	(1,'ali',7),
		(2,'veli',7),
		(3,'cemal',6),
		(4,'Gülçin',5)
		) AS C(numara,isim,yas);  

Ve elde edilen değerleri gerçek bir tabloymuş gibi sorgulamak mümkündür.

Şekil -5: Literal değerlerden türetilmiş tablo elde ederek sorgulama yapılması.

b)Tablo tipi değişkenleri alias tip olarak tanımlamak


Şekil: Tablo türünden bir alias tip oluşturmak

c) Tablo Tipi Değişkenleri Parametre Olarak Aktarmak

SQL Server 2008’e kadar, tablo tipi bir değişkeni prosedürel veritabanı bileşenlerine parametre olarak aktarmanın doğrudan bir yöntemi yoktu. Alternatif olarak virgülle ayrılmış string ifade gönderimi gibi yöntemler kullanılsa da güvenlik açıklarına neden olduğundan 2008 sürümden itibaren Tablo tipi girdi değişken desteği, Alias tip olmak koşulu ve sadece okunabilir kalması şartı ile desteklenmekte.

Örnek-5:

Öncelikle girdi parametre olarak tablo tipi değişken kabul eden(girdi değişkeni select eden basit bir örnek) kodlayalım:

USE Test
GO
CREATE PROC TableTipAlanSp(@ogrenciListesi AS dbo.Ogrenci READONLY)
AS
BEGIN
	SELECT * FROM @ogrenciListesi;
END

Ve daha sonra, bu prosedürü kullanalım:

DECLARE @ogrenciListesi AS dbo.Ogrenci 
INSERT INTO @ogrenciListesi 
VALUES(1,'Ali'), (2,'veli'), (3,'Gülçin') ;
EXEC TableTipAlanSp @ogrenciListesi ;


Şekil:Tablo türünden bir alias tip kullanarak, tablo tipi değişkeni girdi parametre olarak kabul eden bir prosedür ve kullanımı.

Gelecek Bölümlerde:

  • Tarih ve Zaman ile ilgili yenilikler
  • Hiyerarşik Verilerle İlgili Yenilikler
  • Gruplama Hakkında Yenilikler
  • Merge İfadesi, Seyrek Sütunlar, Filtreli İndeksler ve İstatistikler

Yorumlar

murat yorumladı(03.01.2010 12:00:38)
SQL Server kullanıcı
Hocam merhaba, EXE programlarında ODBC ile kullanıcılar bağlandıkları zaman SQL Server'de sp_who ile tüm detayları görebiliyoruz. oradaki hostname'den kimin ne kadar kaynak harcadığını bulup gerektiğinde kill edebiliyoruz. Fakat web uygulamalarında kullanıcıları birbirinden ayıramıyoruz çünkü herkes aynı SPID ve hostname ile geliyor. Bazı kullanıclar yoğun sorgulamalar yapıyor bunu anlık olarak nasıl ayırabiliriz. Her kullanıcı için SQL Server'da kullanıcı açıp ona göre connection string oluşturmak olsa o zaman sp_who'dan görülür fakat bu da maliyetli olur.


celalettin yorumladı(22.02.2011 09:20:47)
Yaşar Gözüdeli sql2005 -2008 kitap içeriği farkı
burda anlatılanlar gibi farklı 2008 kitabında var mıdır? bilginiz var mı?


Yaşar Gözüdeli yorumladı(11.07.2011 20:39:57)
Kitap Farkları
Kitaplar arasında burdaki gibi değişimlerin yansıtılmasından ve kaldırılan özelliklerin kaldırılmasından ibaret %10-20 civarı bir değişiklik oluşabiliyor. Ayrıca anlatım hataları veya karmaşık ifadelerin basitleştirilmesi gibi ufak düzeltmeler de her yeni baskıda yer alıyor.


Melih MERCAN yorumladı(30.01.2012 16:38:10)
T-Sql Çalışmıyor
Hocam, data altında T-Sql editör altında new query connection a tıklıyorum herhangi bir hareketlilik yok açılmıyor birşey. Ne yapmalıyım. 2. defa kurdum halde gelmiyor.


Yaşar Gözüdeli yorumladı(01.02.2012 00:36:35)
@Melih
Hocam, DATA/T-SQL editor dediğimiz neyin menüleri? Visual Studio mu, yoksa Management Studio mu?



Konuya müdahil olmak ister misiniz?
Başlık:  
İsim  :  
URL   :
Yorum