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

  1. Tekrarlayan kayitlari bul
  2. Bu kayitlar icin bir Cursor ac
  3. Delete Top(1) yapisi ile tekrarlayan kayitlardan ilkini sil
  4. 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,
  1. msdb veritabaninda bulunan system tablolari
  2. bu tablolara yollanacak maili ekleyen procedureler
  3. bu tablolardaki mailleri yollayan bir exe'den olusmakta.

Database Mail'i kullanmak icin yapmaniz gerekenler ise soyle

  1. Surface Area Configuration kullanarak, Database Mail'i etkin hale getirmek.
  2. SQL Server Management Studio'dan Database Mail'i ayarlamak. Bunun icin kullanabilecegimiz bir SMTP server olmali.
  3. sp_send_dbmail ile maili yollamak.

Oldukca kolay ve kullanisli.