Самые большие/длинные записи в таблице varchar

Недавно мы заметили, что в одной из наших самых больших таблиц некоторые строки в несколько раз больше других. Под «большим» я подразумеваю более длинный и занимающий больше места для хранения.

Как отобразить 1000 самых больших строк в таблице?

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

Я попытался изменить это:

select MyVarcharColumnName
from MyTableName
where len(MyVarcharColumnName) =
(select max(len(MyVarcharColumnName)) from MyTableName)

и это:

select max(len(Desc)) from table_name

но

я получаю сообщение об ошибке

Сообщение 156, уровень 15, состояние 1, строка 1 Неверный синтаксис рядом с ключевым словом «Описание».


person QWE    schedule 10.06.2015    source источник
comment
DESC — зарезервированное слово   -  person Lamak    schedule 10.06.2015


Ответы (2)


Как насчет этого?

select top 1000 t.*
from MyTableName t
order by len(MyVarcharColumnName) desc;

Если у вас есть несколько столбцов, вы можете добавить их в order by:

order by (len(col1) + len(col2) + . . . ) desc

Я использовал len() для этого расчета, потому что это то, что вы используете в своем вопросе. Вас также может заинтересовать [DATALENGTH()][1].

person Gordon Linoff    schedule 10.06.2015

Он считает, что Desc — это ключевое слово, а не идентификатор. Попробуйте заключить его в угловые скобки ([]), например:

select max(len([Desc])) from table_name
person Ruslan    schedule 10.06.2015
comment
К сожалению, по-прежнему не работает, но спасибо за попытку помочь. - person QWE; 10.06.2015