Обойти ограничение максимального размера столбцов в SQL Server 1024 и 8 КБ
Я создаю таблицу с 1000 столбцами. Большинство столбцовnvarchar
тип. Таблица создана, но с предупреждением
Предупреждение. Таблица «Тест» создана, но ее максимальный размер строки превышает допустимый максимум в 8060 байт. INSERT или UPDATE этой таблицы завершатся неудачно, если результирующая строка превысит ограничение размера.
В большинстве столбцов таблицы уже есть данные (то есть 99% столбцов содержат данные). Когда я пытаюсь обновить любой столбец после 310-го (где все 309 столбцов имеют некоторое значение), он выдает ошибку:
Невозможно создать строку размером 8061, которая превышает максимально допустимый размер строки 8060.
Я вставляю эти данные во все стартовые 308 столбцов
"Lorem Ipsum Dolor Sit Amet, Экипетер-Адепсис".
Когда я используюntext
тип данных, то это позволяет мне обновить около 450 столбцов, но помимо этогоntext
также не позволяет мне. Я должен обновить по крайней мере 700 столбцов. Какой SQL Server не позволяет это сделать. У меня есть сценарий, что я не могу переместить некоторые столбцы таблицы в другую таблицу.
На самом деле я работаю для существующего оконного приложения. Это очень большое приложение для Windows.
На самом деле таблица, в которую я пытаюсь вставить до 700 столбцов nvarchar, создается динамически во время выполнения. Только в некоторых случаях требуется вставить 400-600 столбцов. Но обычно для этого нужно 100-200 колонок, которые я могу легко обработать.
Проблема в том, что я не могу разбить эту таблицу на несколько таблиц. Поскольку множество таблиц, созданных с этой структурой, и имена таблиц хранятся в другой таблице, то есть существует более 100 таблиц с этой структурой, и они создаются динамически. Для создания таблицы и манипулирования ее данными используется 4-5 языков (C #, Java ..), а также включаются WCF, Windows Service и Webservices.
Поэтому я не думаю, что было бы легко манипулировать таблицей и ее данными после разбиения таблицы. Если я разделю таблицу, то это потребует много структурных изменений.
Поэтому, пожалуйста, предложите мне, что было бы лучшим способом решить эту проблему.
Я также пытался использоватьРазреженная колонна любить:
Create table ABCD(Id int, Name varchar(100) Sparse, Age int);
Я тоже думал оColumnStoreIndex но моя цель не решена.
Разреженные столбцы позволяют мне создавать 3000 столбцов для таблицы, но это также ограничивает меня по размеру страницы.
Есть ли способ достичь этого с помощью какой-то временной таблицы или с помощью любого другого типа объекта сервера SQL?