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

Perché non posso mettere un vincolo su nvarchar(max)?

nvarchar(max) è in realtà un tipo di dati diverso da nvarchar(integer-length) . Le sue caratteristiche sono più simili al deprecato text tipo di dati.

Se nvarchar(max) il valore diventa troppo grande, come text , verrà archiviato all'esterno la riga (una riga è vincolata a un massimo di 8000 byte) e un puntatore ad essa viene memorizzato nella riga stessa. Non è possibile indicizzare in modo efficiente un campo così grande e il fatto che i dati possano essere archiviati da qualche altra parte complica ulteriormente la ricerca e l'analisi dell'indice.
Un vincolo univoco richiede l'applicazione di un indice e, di conseguenza, i progettisti di SQL Server hanno deciso di non consentire creando un vincolo unico su di esso.