MSDN has this to say on the subject:
nvarchar [ ( n | max ) ]
Variable-length Unicode character data. ncan be a value from 1 through 4,000. max indicates that the maximum storage size is 2^31-1 bytes. The storage size, in bytes, is two times the number of characters entered + 2 bytes. The data entered can be 0 characters in length. The ISO synonyms for nvarchar are national char varying and national character varying.
This leaves me confused. I can define a column as being 1 – 4000 long, or 2147483647 long but nothing inbetween? Is my understanding correct? Why can’t I be explicit about values inbetween?
NVARCHAR(MAX)covers everything else (not just 2 billion characters). If you need more than 4,000 characters the data is most certainly going to be off-page, so as far as behavior is concerned it doesn’t matter if you’ve used 4,001 characters, 10,000 characters, or 10,000,000 characters. It only occupies the space you need, so don’t think that you are wasting(2 billion characters - the length of your actual string).