Tworzę widok z indeksem, który ignoruje wartości null poprzez klauzulę where...tj. jeśli wstawisz wartość null do tabeli, widok nie obchodzi, ale jeśli wstawisz wartość inną niż null, widok wymusi ograniczenie.
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
Więc teraz moja tabela sprzętu ma kolumnę asset_tag, która dopuszcza wiele wartości null, ale tylko unikalne wartości inne niż null.
Uwaga:jeśli używasz mssql 2000, musisz "WŁĄCZ ARITHABORT " tuż przed wykonaniem operacji wstawiania, aktualizacji lub usuwania na stole. Jestem pewien, że nie jest to wymagane w mssql 2005 i nowszych.