Тип данных длины в sys.columns - это smallint, в то время как максимальная длина varchar (max) составляет 2,1 миллиарда, поэтому у него есть проблема с сохранением реальной длины.-1 находится в документации для обозначения varchar (max), varbinary (max), nvarchar (max) и xml.
http://msdn.microsoft.com/en-us/library/ms176106(v=sql.100).aspx
Если вам действительно нужно число, тогдавам понадобится инструкция case, чтобы заменить -1 на (2 ^ 31) -1
Если вы хотите получить длину физических данных, то вам нужно max / min / avg соответствующие длины в таблицахс данными, основанными на том, для чего вам нужна эта информация.При запросе длины поля DATALENGTH
возвращает используемые байты, LEN
возвращает количество символов.