Creo una vista con un índice que ignora los valores nulos a través de la cláusula where... es decir si inserta un valor nulo en la tabla, a la vista no le importa, pero si inserta un valor no nulo, la vista aplicará la restricción.
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
Así que ahora mi tabla de equipos tiene una columna asset_tag que permite múltiples valores nulos pero solo valores únicos no nulos.
Nota:si utiliza mssql 2000, deberá "CONFIGURAR ARITHABORT " justo antes de que se realice cualquier inserción, actualización o eliminación en la tabla. Bastante seguro de que esto no es necesario en mssql 2005 y versiones posteriores.