Jag skapar en vy med ett index som ignorerar nollorna genom where-satsen...dvs. om du infogar null i tabellen bryr vyn sig inte men om du infogar ett icke-nullvärde kommer vyn att upprätthålla begränsningen.
create view dbo.UniqueAssetTag with schemabinding
as
select asset_tag
from dbo.equipment
where asset_tag is not null
GO
create unique clustered index ix_UniqueAssetTag
on UniqueAssetTag(asset_tag)
GO
Så nu har min utrustningstabell en asset_tag-kolumn som tillåter flera nollvärden men bara unika icke-nullvärden.
Obs! Om du använder mssql 2000 måste du "STÄLLA PÅ ARITHABORT " precis innan någon infogning, uppdatering eller radering utförs på tabellen. Ganska säker på att detta inte krävs på mssql 2005 och uppåt.