Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come faccio a creare un vincolo univoco che consenta anche valori null?

Quello che stai cercando fa effettivamente parte degli standard ANSI SQL:92, SQL:1999 e SQL:2003, ovvero un vincolo UNIQUE deve impedire la duplicazione di valori non NULL ma accettare più valori NULL.

Nel mondo Microsoft di SQL Server, tuttavia, è consentito un singolo NULL ma più NULL non lo sono...

In SQL Server 2008 , puoi definire un indice filtrato univoco basato su un predicato che esclude i NULL:

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

Nelle versioni precedenti, puoi ricorrere a VIEWS con un predicato NOT NULL per applicare il vincolo.