Başlığın biraz karmaşık olduğunun farkındayım. Aslında sorunumu anlatsam sanırım daha rahat anlaşılırım. SQL Server'da bir sütuna UNIQUE constraint verdiğinizde, bu sütuna ilk NULL değer geldiğinde INSERT işlemi başarılı olur. İkinci bir INSERT'te daha bu sütuna NULL değer gelirse ne mi olur?
SQL Server 2008 ve öncesi bir sürüm kullanıyorsanız, NULL gelen ikinci değer birinci NULL değer ile aynı olduğundan,(Aslında ANSI standardına göre, NULL demek bilinmeyen demektir. Bilinmeyen iki şeyin eşitliğinden söz etmek imkansızdır) ikinci değer Tekil Kısıtlayıcı(Unique Constraint)'e takılacak ve kayıt eklenemeyecektir. Oracle ise bu durumu ANSI tanımına uygun olarak ele almakta. SQL Server 2008'den itibaren NULL değerleri eşit kabul etmemek için FİLTRELİ İNDEKS kavramından faydalanabiliriz.
Örneğin
CREATE TABLE tbPersonel(
PERSONELNo INT,
tcKimlikNo BIGINT,
ad VARCHAR(50),
soyad VARCHAR(50)
)
Şeklinde bir tablomuz olsun.
Bu tabloya gelecek tcKimlikNo değerinin, bilinmeyen personel için NULL girilebilmesini, bilinen personeller için ise birbirinden farklı değerler girilmesini sağlayacak indeks tanımı şu şekilde yapılabilir:
CREATE NONCLUSTERED UNIXUE INDEX IND_tcKimlikNo
ON tbPersonel(tcKimlikNo)
WHERE tcKimlikNo IS NOT NULL