Ошибка «Невозможно создать строку ... больше допустимого максимального размера строки» при применении UNION к таблицам с одинаковым количеством столбцов - PullRequest
0 голосов
/ 22 апреля 2020

Я пытаюсь объединить 5 таблиц. Каждый из них имеет одинаковое количество столбцов (300+). Я могу с радостью загрузить каждую таблицу по отдельности.

Ошибка:

Невозможно создать строку размером 8161, который превышает допустимый максимальный размер строки 8060.

Что само собой разумеется - вся объединенная строка (из 300+ столбцов) слишком велика в памяти.

Я запутался, как таблица была создана в первую очередь и как я мог ожидать, что союз? Объединение не увеличивает размер строки, а только количество строк, поэтому не понимает, как объединение может вызвать это, если их можно ВЫБРАТЬ индивидуально.

Есть ли способ подавить это ограничение?

Спасибо!

1 Ответ

0 голосов
/ 22 апреля 2020

Тип преобразования может изменить размер отдельных столбцов. Запрос union не требует, чтобы все столбцы имели одинаковый тип, поэтому он допускает некоторое неявное преобразование.

Например, это:

select convert(tinyint, 1)
union all
select convert(int, 102345678)

возвращает и целое число - три дополнительные байты по сравнению с tinyint. Это может легко случиться с датами и датами и даже с национальными наборами символов.

...