Получение максимальной длины varchar (max) из syscolumns в SQL Server - PullRequest
3 голосов
/ 17 января 2012
select  c.name, t.name, c.length   
from syscolumns c

c.length дает мне -1 для любого столбца, который имеет максимум, например, varchar (max)

Что я должен сделать, чтобы получить длину?

Ответы [ 4 ]

7 голосов
/ 17 января 2012

Тип данных длины в 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 возвращает количество символов.

5 голосов
/ 17 января 2012

-1 означает, что столбец имеет тип max.Максимальная длина - тип max согласно документации.Максимальные типы имеют максимальную длину 2 ГБ, если не указан атрибут FILESTREAM, или максимальный размер ограничивается только доступным размером диска :

Размеры больших двоичных объектов ограниченытолько по размеру тома файловой системы.Стандартное ограничение varbinary (max) для файлов размером 2 ГБ не применяется к BLOB-объектам, хранящимся в файловой системе.

Поэтому на ваш вопрос действительно нет ответа.Вы можете спросить, каков фактический размер любого фактического значения в таблице, используя DATALENGTH.

0 голосов
/ 17 января 2012

Длина столбца в каждой строке может варьироваться. Отсюда и результат -1

0 голосов
/ 17 января 2012

Как видно ЗДЕСЬ :

Данные переменной длины, отличные от Unicode.n может быть значением от 1 до 8000.max указывает, что максимальный размер хранилища составляет 2 ^ 31-1 байт.Размер хранилища - это фактическая длина введенных данных + 2 байта.Введенные данные могут быть длиной 0 символов.Синонимы ISO для varchar различаются символами или символами.


Другими словами, max = 2147483647 байт, если все возможное пространство занято.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...