Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment créer une contrainte unique qui autorise également les valeurs NULL ?

Ce que vous recherchez fait en effet partie des normes ANSI SQL:92, SQL:1999 et SQL:2003, c'est-à-dire qu'une contrainte UNIQUE doit interdire les valeurs non NULL en double mais accepter plusieurs valeurs NULL.

Dans le monde Microsoft de SQL Server cependant, un seul NULL est autorisé mais plusieurs NULL ne le sont pas...

Dans SQL Server 2008 , vous pouvez définir un index filtré unique basé sur un prédicat qui exclut les valeurs NULL :

CREATE UNIQUE NONCLUSTERED INDEX idx_yourcolumn_notnull
ON YourTable(yourcolumn)
WHERE yourcolumn IS NOT NULL;

Dans les versions antérieures, vous pouvez recourir à VIEWS avec un prédicat NOT NULL pour appliquer la contrainte.