Превышен предел размера строки в SQL 2008 R2

У меня есть база данных SQL 2008 R2. Я создал таблицу, и при попытке выполнить для нее оператор select (с условием order by) я получаю сообщение об ошибке "Невозможно создать строку размером 8870, которая превышает допустимый максимальный размер строки 8060".

Я могу выбрать данные без заказа по предложению, однако заказ по заказу важен, и мне это нужно. Я попробовал опцию ROBUST PLAN, но все равно получил ту же ошибку.

В моей таблице более 300 столбцов с типом данных TEXT. Я пытался использовать varchar и nvarchar, но безуспешно.

Может кто-нибудь, пожалуйста, дать некоторое представление?

Обновление:

Спасибо за комментарии. Согласен. 300+ столбцов в одной таблице не очень хороший дизайн. Я пытаюсь внести вкладки Excel в базу данных в виде таблиц данных. Некоторые вкладки имеют более 300 столбцов.

Сначала я использую оператор CREATE, чтобы создать таблицу на основе вкладки Excel, чтобы столбцы различались. Затем я делаю различные операторы SELECT, UPDATE, INSERT и т. Д. Для таблицы после того, как таблица создана с данными.

Структура таблицы обычно соответствует этому шаблону: fkVersionID, RowNumber(autonumber), Field1, Field2, Field3 и т. Д.

Есть ли способ обойти ограничение размера строки 8060?

3 ответа

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

varchar - хороший выбор, если вы можете соответствующим образом ограничить его максимальный размер. 8000 символов - все еще реальный предел, но если в среднем каждый столбец varchar не превышает 26 символов, все будет в порядке. Вы можете пойти на риск и использовать varchar и длину 50 символов, но в среднем используйте только 26 символов на столбец... это означает, что один столбец может быть длиной до 36 символов, а следующий - длиной 16 символов... тогда вы снова в порядке. (Пока вы не превысите среднее значение 26 символов в столбце для 300 столбцов.)

Очевидно, что с динамическим количеством полей и возможностью превышения предела в 8000 символов, он обречен спецификациями SQL. Ваша единственная альтернатива - создать несколько таблиц, и при доступе к данным иметь уникальный ключ для присоединения соответствующих записей. Так что в вашем операторе select используйте соединение, и из нескольких таблиц вы можете обрабатывать строки с 8000 + 8000 + ...

Так что это выполнимо, но вы должны работать с правилами SQL.

Я считаю, что вы сталкиваетесь с этим ограничением:

Количество предложений в предложении ORDER BY не ограничено. Однако существует ограничение в 8 060 байт для размера строки промежуточных рабочих таблиц, необходимых для операций сортировки. Это ограничивает общий размер столбцов, указанных в предложении ORDER BY.

У меня было старое приложение, подобное этому, это был кошмар.

Во-первых, я разбил его на несколько таблиц, все один к одному. Это плохо, но менее плохо, чем то, что у тебя есть.

Затем я изменил запросы, чтобы запрашивать только те столбцы, которые действительно были нужны. (Я не могу сказать, если у вас есть такая возможность.)

Другие вопросы по тегам