Перейти к основному контенту
Поддержка
Войдите с помощью учетной записи Майкрософт
Войдите или создайте учетную запись.
Здравствуйте,
Выберите другую учетную запись.
У вас несколько учетных записей
Выберите учетную запись, с помощью которой нужно войти.

Проблемы

Предположим, что вы добавляете столбец в таблицу в Microsoft SQL Server 2012 или SQL Server 2014. Если размер строки близок к максимальному разрешенному размеру (8 060 байт), операция добавления может занять много времени.

Причина

Проблема возникает из-за того, что когда общий размер строки близок к максимально разрешенному размеру строки, SQL Server производит полную проверку таблицы, чтобы убедиться, что добавление нового столбца не нарушает целостность данных. Версии, предшествующие SQL Server 2012, не выполняют эту проверку, и благодаря этому язык описания данных (DDL) будет работать быстрее. Однако это приводит к сбою последующих операций, таких как обновление строки или сжатие, если размер строки превышает допустимый размер.

Все новые накопительные обновления для SQL Server содержат все исправления и все исправления для системы безопасности, которые были включены в предыдущий накопительный пакет обновления. Ознакомьтесь с самыми последними накопительными обновлениями для SQL Server.

Дополнительная информация

  • Вы можете включить флаг трассировки 647 с помощью параметра запуска. Дополнительные сведения можно найти в разделе Параметры запуска службы ядраСУБД.

  • Вы можете выполнить следующий запрос (замените <имя таблицы> именем фактической таблицы), чтобы проверить определенную таблицу перед операцией в рабочей системе и спланировать ее влияние. Если результат больше 8 060, в таблице будет налагается эта проблема. Кроме того, если вы удалили столбцы, вам нужно изменить таблицу с помощью параметра REBUILD. Перестройка таблицы может сделать запрос возвращать правильные результаты.

    select  1+1+2 + 2 +  (case  when sum (case when leaf_offset < 0 then 1 else 0 end) > 0 then 2 else 0 end)  +  ( (count (*) + 7)/8 ) + count (case when leaf_offset < 0 then 1 else null end) * 2 +  sum( case when max_length=-1 then 24 else max_length end)  from sys.system_internals_partition_columns   col join sys.partitions par on col.partition_id = par.partition_id  where object_id = object_id ('<table name>')  and  index_id in (0,1) and partition_number =1 
  • Вы можете добавить столбцы переменной длины или разреженные столбцы, когда приложение часто добавляет новые столбцы в таблицу. Это операция, доступная только для метаданных, даже если общий размер всех столбцов превышает 8 060 байт.

Статус

Корпорация Майкрософт подтверждает наличие этой проблемы в своих продуктах, которые перечислены в разделе "Применяется к".

Нужна дополнительная помощь?

Нужны дополнительные параметры?

Изучите преимущества подписки, просмотрите учебные курсы, узнайте, как защитить свое устройство и т. д.

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

Были ли сведения полезными?

Насколько вы удовлетворены качеством перевода?
Что повлияло на вашу оценку?
После нажатия кнопки "Отправить" ваш отзыв будет использован для улучшения продуктов и служб Майкрософт. Эти данные будут доступны для сбора ИТ-администратору. Заявление о конфиденциальности.

Спасибо за ваш отзыв!

×