SQL Server 2005 ile gelen ROW_NUMBER() fonksiyonu ile SQL Server 2000'de zaman zaman bas agritan sorgu sonuclarina sira numarasi verme isini kolaylikla cozmek mumkun.
Ornegin asagidaki ornekte. Sorgu sonucu UserID alanina gore siralanirken UserID alanina gore
verilmis bir sira numarasida sonuclara eklenecek.
Select
ROW_NUMBER() OVER(ORDER BY UserID) SiraNumarasi,
UserID,
UserName
from
User
Bu fonksiyonun guzel yanlarindan biri de sira numarasini yarattiktan sonra sonuclari baska bir alani kullanarak siralayabilecek olmaniz. yukaridaki cumleye eklenecek "order by UserName" eki ile sonuclariniz UserName gore sirali gelirken SiraNumarasi alani ise UserID'ye gore olusturulacak.
Select
ROW_NUMBER() OVER(ORDER BY UserID) SiraNumarasi,
UserID,
UserName
from
User
order by
UserName
Oldukca kullanisli
6.08.2007
12.07.2007
Delete Top(1) ve tekrarlayan kayitlar (duplicates)
SQL 2000'de bulunmayan ama SQL 2005'e eklenen yeni bir ozellik de Delete cumlecikleri icinde TOP (1) yapisini kullanarak, kaynak tablodan belli sayida kayiti silebilmek.
Bunu nerede mi kullanabiliriz?
Ben soyle bir yapida kullandim.
SQL tablolarinda olusan onemli problemlerden biri duplicate kayitlar. Eger tablomuz dogru keyleri bulundurmuyorsa bu problemle karsilasma olasiligimiz artar. Bu kayitlari bulmak kolay olsa da bunlari temizlemek her zaman kolay olmuyor. Duplicate kayitlari genelde ara tablolari kullanarak temizlerdim bu sefer soyle bir yol izledim.
Ornegin Musteri ve Urun iliskisini tutan bir tabloda olusan tekararlayan kayitlari silmek istiyorum.
Bunun icin soyle bir yontem izledim
Declare @CustomerID varchar(6)
Declare @ItemNO varchar(11)
DECLARE xCursor CURSOR FOR
Select CustomerID,ItemNo from Tablo
Group by CustomerID,ItemNo
Having count(*)>1
ORDER BY CustomerID
OPEN xCursor
FETCH NEXT FROM xCursor
INTO @CustomerID,@ItemNo
WHILE @@FETCH_STATUS = 0
BEGIN
WHILE (Select Count(*) from Tablo Where CustomerID = @CustomerID and ItemNO = @ItemNo ) > 1
Delete Top(1) From
Tablo
Where
CustomerID = @CustomerID and
ItemNO = @ItemNo
FETCH NEXT FROM xCursor
INTO @CustomerID,@ItemNo
END
CLOSE xCursor
DEALLOCATE xCursor
Bunu nerede mi kullanabiliriz?
Ben soyle bir yapida kullandim.
SQL tablolarinda olusan onemli problemlerden biri duplicate kayitlar. Eger tablomuz dogru keyleri bulundurmuyorsa bu problemle karsilasma olasiligimiz artar. Bu kayitlari bulmak kolay olsa da bunlari temizlemek her zaman kolay olmuyor. Duplicate kayitlari genelde ara tablolari kullanarak temizlerdim bu sefer soyle bir yol izledim.
Ornegin Musteri ve Urun iliskisini tutan bir tabloda olusan tekararlayan kayitlari silmek istiyorum.
Bunun icin soyle bir yontem izledim
- Tekrarlayan kayitlari bul
- Bu kayitlar icin bir Cursor ac
- Delete Top(1) yapisi ile tekrarlayan kayitlardan ilkini sil
- Tekrarlayan kayit kalmayana kadar devam et.
Bunun icin asagidaki scripti yazmistim.
Bu script donguler kullandigindan buyuk tablolarda performansi dusuk olacatir. Alternatif olarak Tabloya bir idendity kolon ekleyerek daha hizli olarak tekrarlayan kayitlari bulmaniz mumkun, ancak eger tablo yapilari ile oynayamiyorsaniz asagidaki script bir alternatif olabilir.Declare @CustomerID varchar(6)
Declare @ItemNO varchar(11)
DECLARE xCursor CURSOR FOR
Select CustomerID,ItemNo from Tablo
Group by CustomerID,ItemNo
Having count(*)>1
ORDER BY CustomerID
OPEN xCursor
FETCH NEXT FROM xCursor
INTO @CustomerID,@ItemNo
WHILE @@FETCH_STATUS = 0
BEGIN
WHILE (Select Count(*) from Tablo Where CustomerID = @CustomerID and ItemNO = @ItemNo ) > 1
Delete Top(1) From
Tablo
Where
CustomerID = @CustomerID and
ItemNO = @ItemNo
FETCH NEXT FROM xCursor
INTO @CustomerID,@ItemNo
END
CLOSE xCursor
DEALLOCATE xCursor
11.07.2007
Database Mail
SQL Server 2005 ile birlikte, buyuk bas agrisi olan SQLMail yerine daha kullanisli Database Mail geldi. Aslinda zamaninda SQLMail ile ugrasip daha sonra kendi mail yapilarimizi gelistirmistik, microsoft'un da gecte olsa aynisini yapmasina aklin yolu birdir deyip gecelim ve gelelim Database Mail'e.
Database Mail,
Database Mail,
- msdb veritabaninda bulunan system tablolari
- bu tablolara yollanacak maili ekleyen procedureler
- bu tablolardaki mailleri yollayan bir exe'den olusmakta.
Database Mail'i kullanmak icin yapmaniz gerekenler ise soyle
- Surface Area Configuration kullanarak, Database Mail'i etkin hale getirmek.
- SQL Server Management Studio'dan Database Mail'i ayarlamak. Bunun icin kullanabilecegimiz bir SMTP server olmali.
- sp_send_dbmail ile maili yollamak.
Oldukca kolay ve kullanisli.
Kaydol:
Kayıtlar (Atom)