Попробуйте это:
- сумма всех столбцов
select SUM(sc.length)
from syscolumns sc
inner join systypes st on sc.xtype = st.xtype
where id = object_id('table')
- Посмотрите на различные возвращенные предметы
select st.name, sc.*
from syscolumns sc
inner join systypes st on sc.xtype = st.xtype
where id = object_id('table')
Хотя нет никаких гарантий, но, похоже, она имеет ту же длину, что и sp_help 'table'
ПРЕДУПРЕЖДЕНИЕ:
Обратите внимание, что я прочитал статью, связанную с Джоном Руди, и в дополнение к максимальным размерам здесь вам также понадобятся другие вещи, такие как битовая карта NULL, чтобы получить фактический размер строки. Также размеры здесь - максимальные размеры. Если у вас есть столбец varchar, фактический размер в большинстве строк меньше ....
У Vendoran есть хорошее решение, но я нигде не вижу максимального размера строки (на основе определения таблицы). Я вижу средний размер и все виды информации о распределении, которая является именно тем, что вам нужно для оценки размера БД для большинства вещей.
Если вас интересует только то, что sp_help возвращает для длины и суммирует ее, то я думаю (я не уверен на 100%), что запрос к sysobjects возвращает те же числа. Они представляют полный максимальный размер строки? Нет, вам не хватает таких вещей, как битовый массив NULL. Они представляют собой реальную меру ваших фактических данных? Нет. Опять же, VARCHAR (500) не занимает 500 байт, если вы храните только 100 символов. Кроме того, поля TEXT и другие поля, хранящиеся отдельно от строки, не показывают их фактический размер, только размер указателя.