SQL Server 2005'te Null Edilebilir Sütunlarda Benzersiz Kısıtlamalar


12

Üzerinde çalıştığım bu bir projede, belirli bir alanı benzersiz (sorun değil!) Olarak ayarlamam gerekiyor, ancak alan boşsa kısıtlamanın yok sayılmasını istiyorum. Sql Server 2008'de aşağıda gösterildiği gibi filtrelenmiş dizin kullanıyorum, ancak SQL'in önceki sürümlerinde mevcut değil!

CREATE UNIQUE NONCLUSTERED INDEX User_UserName_IUC
ON [User] (pinNr)
WHERE UserName IS NOT NULL

Ama bu SQL Server 2005'te kullanılabilir olduğunu sanmıyorum. Aslında bu blog yazı benzersiz olup olmadığını kontrol etmek için bir tetikleyici kullanarak bir geçici çözüm olduğunu gösterir. Bunun bir örneği var mı? ya da belki bir alternatif?

Ne yazık ki SQl Server 2008'e yükseltme bu özel istemci için bir seçenek değil !!

Yanıtlar:


18

Aslında, böyle bir şey yapmak zorunda kaldım. Olmadığında Benzersiz sütununun NULLdeğerini ve birincil anahtarın değerini (benzersiz sütundaki değerlerle çakışmayı imkansız kılmak için başka bir mantıkla) alan hesaplanmış bir sütun oluşturmayı ve benzersiz dizini bu sütun. Bunun bir örneğini ve tetikleyici yöntemi burada görebilirsiniz .


7

Bir görünüm (Kullanıcı Adının boş olmadığı yerlerde) oluşturabilir ve ardından görünüme benzersiz bir dizin koyabilirsiniz. Görünümü asla kullanmanız gerekmeyecek, sadece bunun için var olacak.

Bu tekniği, normalde imkansız olacağı birkaç tabloda benzersizliği zorlamak için de kullanabilirsiniz.


2
Dizine eklenen görünümler kurumsal sürüm gerektirmez. Bununla birlikte, standart sürüm sorgu iyileştiricisini temel alınan sorgu yerine dizinli görünümü kullanmaya zorlamak için WITH (NOEXPAND) sorgu ipucunu kullanmanızı gerektirir.
Jeremiah Peschka

3
Bu durumda, görüşün tek noktası benzersiz kısıtı uygulamaktır ve bu tamamen geçerli / ortak bir yaklaşımdır.
Martin Smith

2
Enterprise Edition ile ilgili yanlış bilgilerin kaldırılması için düzenlendi.
Meff

@Meff, buradaki yorumlara yanıt vermek için zaman ayırdığınız için teşekkür ederiz - Umarım siteye yabancı olmayacaksınız: bu sorularla ilgilenebilirsiniz :)
Jack,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.