SQL Server максимум 8 КБ на строку? - PullRequest
1 голос
/ 08 декабря 2010

Я только что прочитал спецификацию максимальной емкости для SQL Server 2008 и увидел максимум 8060 байт на строку ? Что за ... Допускается только 8 КБ на строку? (Да, я видел специальную обработку «хранилища с переполнением строк», я говорю о стандартном поведении)

Я что-то здесь неправильно понял? Я уверен, что у меня есть, потому что я уверен, что видел двоичные объекты с несколькими размерами МБ, хранящиеся в базах данных SQL Server. Означает ли это зловещее на строку действительно строку таблицы, как в одной строке, в нескольких столбцах?

Так, когда у меня есть три nvarchar столбца с каждыми 4000 символами (предположим, три юридических документа, написанные в текстовых полях ...) - сервер выдает предупреждение?

Ответы [ 2 ]

3 голосов
/ 08 декабря 2010

Да, вы получите предупреждение о CREATE TABLE, об ошибке при вставке или обновлении

Типы больших объектов (nvarchar (макс.), Varchar (макс.) И varbinary (макс.) Допускают байты 2 ГБ-1, что позволяет хранить большие порции данных и то, что вы видели раньше.

  • Для одного поля> 4000 символов / 8000 байт я бы использовал nvarchar (max)

  • Для 3 x nvarchar (4000) в одном ряду я бы рассмотрел одно из:

    • мой дизайн неправильный
    • nvarchar (max) для одного или нескольких столбцов
    • 1: 1 дочерняя таблица для «наименее заполненных» столбцов
1 голос
/ 08 декабря 2010

2008 будет обрабатывать переполнение, в то время как в 2000 году он просто откажется вставлять переполненную запись. Однако все же лучше проектировать с учетом этого, поскольку значительное количество переполненных записей может вызвать некоторые проблемы с производительностью при запросах. В описанном вами случае я мог бы рассмотреть связанную таблицу со столбцом для типа документа, большим полем для документа и внешним ключом для исходной таблицы. Однако, если не нравится, что все три столбца будут заполнены в одной записи или при максимальных значениях, тогда дизайн может быть в порядке. Вы должны знать свои данные, чтобы определить, что лучше. Другое соображение заключается в том, чтобы продолжить, как у вас сейчас, пока у вас возникнут проблемы, а затем заменить на отдельную таблицу документов. Вы даже можете выполнить рефакторинг, переименовав существующую таблицу и создав новую, а затем создав представление с существующим именем таблицы, которое извлекает данные из новой структуры. Это может помешать работе вашего кода, хотя вам все равно придется корректировать любые операторы вставки или обновления.

...