Unique index ancak Nullere izin veren..

MS SQL Server veritabanı ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Glen
Üye
Mesajlar: 277
Kayıt: 12 Eki 2005 11:58

Unique index ancak Nullere izin veren..

Mesaj gönderen Glen »

Selam,

Arkadaşlar başlıktan biraz anlamışsınızdır sanırım ama yine de açıklama yapayım,

"KODU" alanim Unique oluyor ancak ben istiyorum ki eğer değer Null girilmişse unique ozelligi calismasin yani şöyle diyim..

Null değer dışındaki tüm değerlerde alan unique ozelligini korusun yani kayda izin vermesin ancak gönderilen değer Null ise daha önce o alana null değer kaydedilse bile sorun çıkmasın..

Böyle bir şey mümkün mü? Mümkünse nasıl yapabilirim?

Teşekkür ederim, kolay gelsin
Akin_Delphi
Üye
Mesajlar: 163
Kayıt: 06 Nis 2006 12:22

Re: Unique index ancak Nullere izin veren..

Mesaj gönderen Akin_Delphi »

Glen yazdı:Selam,
"KODU" alanim Unique oluyor ancak ben istiyorum ki eğer değer Null girilmişse unique ozelligi calismasin yani şöyle diyim..

Null değer dışındaki tüm değerlerde alan unique ozelligini korusun yani kayda izin vermesin ancak gönderilen değer Null ise daha önce o alana null değer kaydedilse bile sorun çıkmasın..

Böyle bir şey mümkün mü? Mümkünse nasıl yapabilirim?

Teşekkür ederim, kolay gelsin
Arkadaşım,

UNIQUE benzersiz demek, şimdi bir alanı hem benzersiz tanıtıp hem de içerisinde birden fazla null alan koyamazsınız. Çünkü null alanlar benzersiz özelliğini ihlal eder.

Belki programatik (SQL) ile bir yol bulunabilir, ki bu durumda alanı UNIQUE olarak tanımlamamak gerekir.

Saygılar ve Başarılar
Kullanıcı avatarı
Murat DİCLE
Kıdemli Üye
Mesajlar: 702
Kayıt: 19 Nis 2006 04:12
Konum: İstanbul
İletişim:

Mesaj gönderen Murat DİCLE »

Merhabalar,

Teorik olarak konuşmak gerekirse istediğiniz şey olmaz. Adı üstünde Uniq bir key den bahsediyoruz, diyelim ki siz NULL girişine izin verdiniz ama ikinci bir NULL değerin girişine izin verilmeyecektir. Bence siz bu durumdan kurtulmanın bir yoluna bakın ya da UNIQ key yerine normal key özelliğini kullanın. Ama kayıt yaptırmadan önce aynı koddan var mı diye ön bir sql ile kontrol edin. Tabi bu da performansı ciddi derecede düşürecektir.

Ama şöyle bir şey ile bu işten kurtulabilirsinz, diyelim ki KOD alanınınz alfanümerik bir alan. A001, B001 gibi kodları içerebiliyor.

Yeni bir kayıt girildiğinde eğer KOD hanesi null ise, beforepost olayında kontrol edilmelidir. KOD alanına KOD := 'nul_' + Inttostr(GetTickCount); gibilerinden bir değer verin.

Daha sonra kod verilmemiş kayıtları listelemek kolay olacak ve gerekirse bunların kodlarını değiştirebileceksiniz. Buradaki GetTickCount çok iyi bir yöntem değil ama başlarda iş görür taki çakışma durumuna kadar.

Şimdi UNIQ key kullanmanın kolaylığı oluyor tabiki, bir kişi var olan bir kodu kullandığında kayıt sırasında hata üretiliyor sizde bunu böyle kaydemezsiniz diyordunuz. Yani uygulamanın hata yapmasına olanak tanıyordunuz. Pekte iyi bir fikir gibi görünmüyor. Kayıt esnasında kişi KOD alanına bir kod yazıp al satıra geçtiğinde otomatik kontrol daha mantıklı gibi geliyor. KOD tabloda yoksa hiç bir uyarı vermezsin. Eğer kod tabloda varsa kod alanını boşaltırsınız. Falan filan..

Umarım faydalı olabilmişimdir..

Saygılar...
Glen
Üye
Mesajlar: 277
Kayıt: 12 Eki 2005 11:58

Mesaj gönderen Glen »

Hmm anladim.. Napalim artik o alanin unique ozelligini kaldiracaz baska care yok :)

Ilgilendiginiz icin tesekkürler, kolay gelsin
Cevapla