Исправление: Столбец данных могут быть удалены при обновлении другого столбца переменной длины в таблице базы данных, обновленных с SQL Server 2005

ВНИМАНИЕ! Данная статья переведена с использованием программного обеспечения Майкрософт для машинного перевода и, возможно, отредактирована посредством технологии Community Translation Framework (CTF). Корпорация Майкрософт предлагает вам статьи, обработанные средствами машинного перевода, отредактированные членами сообщества Майкрософт и переведенные профессиональными переводчиками, чтобы вы могли ознакомиться со всеми статьями нашей базы знаний на нескольких языках. Статьи, переведенные с использованием средств машинного перевода и отредактированные сообществом, могут содержать смысловое, синтаксические и (или) грамматические ошибки. Корпорация Майкрософт не несет ответственности за любые неточности, ошибки или ущерб, вызванные неправильным переводом контента или его использованием нашими клиентами. Подробнее об CTF можно узнать по адресу http://support.microsoft.com/gp/machine-translation-corrections/ru.

Эта статья на английском языке: 3120595
Проблема
При обновлении значений в столбце переменной длины в таблице базы данных, который был обновлен с Microsoft SQL Server 2005, данные из другого столбца переменной длины в той же строке, будут удалены.

Эта проблема возникает в Microsoft SQL Server 2012 и 2014 Microsoft SQL Server. Следующий сценарий может предоставлять базу данных для этой проблемы. Этот список представляет собой последовательность событий:

  • База данных создается в SQL Server 2005.
  • В SQL Server 2005 изменение таблицы, а затем удалить один или более столбцов переменной длины в конец определения таблицы.
  • Добавление новых столбцов переменной длины, имеющие аналогичный тип данных и длина удаленные столбцы.
  • База данных обновляется из SQL Server 2005 до 2014 SQL Server или SQL Server 2012.
  • Позже обновить значение другого столбца переменной длины и содержит обновленные данные к переполнению на новую страницу.
В этом случае могут быть удалены данные в один или несколько столбцов, добавленных в той же строке.

Можно использовать сценарий в Дополнительные сведения раздел, чтобы проверить следующее:

  • Удалены ли все таблицы в указанной базы данных столбцов переменной длины
  • Ли дополнительные столбцы переменной длины были созданы, имеющих сопоставляемые смещения
Примечание. Эта проблема не обнаруживается с помощью инструкции DBCC CHECKDB.
Решение
Примечание. Это исправление предотвращает только проблемы станут активными в дальнейшем.

Важно: При обновлении базы данных с SQL Server 2005 2014 SQL Server или SQL Server 2012, убедитесь, что можно найти в разделе «Временное решение».

Данная проблема была впервые устранена в следующее накопительное обновление для SQL Server:

Это последние накопительные обновления для этих версий программы.

Рекомендация: Установите последнее накопительное обновление для SQL Server 2014 или SQL Server 2012

Установка каждого нового накопительного обновления для SQL Server содержит все исправления и все исправления безопасности, которые были включены в предыдущие накопительного обновления. Извлечь последние накопительные обновления для SQL Server:



Примечание. Дополнительные сведения о последней версии сборок SQL Server см. Где найти сведения о последней версии SQL Server формирует.
Временное решение
Важно: Применение этого метода обхода при обновлении базы данных SQL Server 2005 для 2014 SQL Server или SQL Server 2012 и до запуска в обновленной базе данных инструкций UPDATE.

Для временного решения этой проблемы при удалении столбцов в таблице, убедитесь в том, выполните одно из следующих действий до обновления или удаления строк.

  • Перестроение кластеризованного индекса с помощью инструкции ALTER INDEX (...) ПЕРЕСТРОИТЬ
  • Перестроение кучи с помощью ALTER TABLE (...) ПЕРЕСТРОИТЬ

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

Примечание. Если сценарий не возвращает ни одной строки, это означает, что данная проблема не применяются в настоящее время для любой таблицы в системе.
SELECT DISTINCT OBJECT_NAME(sp.[object_id]) AS TableWithDroppedColsFROM sys.system_internals_partition_columns sipc1 WITH (NOLOCK)INNER JOIN sys.system_internals_partition_columns sipc2 WITH (NOLOCK)       ON sipc1.[partition_id] = sipc2.[partition_id] AND              sipc1.leaf_offset = sipc2.leaf_offset AND              sipc1.leaf_offset < 0 AND               sipc1.is_dropped < sipc2.is_droppedINNER JOIN sys.partitions sp WITH (NOLOCK) ON sipc1.[partition_id] = sp.[partition_id];

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

Свойства

Номер статьи: 3120595 — последний просмотр: 05/31/2016 06:38:00 — редакция: 11.0

Microsoft SQL Server 2012 Developer, Microsoft SQL Server 2012 Enterprise, Microsoft SQL Server 2012 Standard, Microsoft SQL Server 2014 Service Pack 1, Microsoft SQL Server 2014 Developer, Microsoft SQL Server 2014 Enterprise, Microsoft SQL Server 2014 Standard

  • kbqfe kbfix kbexpertiseinter kbsurveynew kbmt KB3120595 KbMtru
Отзывы и предложения