Applies ToSQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2012 Developer SQL Server 2012 Enterprise SQL Server 2012 Standard

Симптоми

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

Причина

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

Всяка нова сборна актуализация за SQL Server съдържа всички поправки и всички корекции на защитата, които са били включени в предишната сборна актуализация. Вижте последните сборни актуализации за SQL Server:

Повече информация

  • Можете да включите флага за проследяване 647 с помощта на параметъра Startup. За информация вижте Опции за стартиране на услугата за двигатели на базата данни.

  • Можете да изпълните следната заявка (Моля, заменете <име на таблица> с истинското име на таблицата), за да тествате конкретната таблица преди операцията в системата за производство и да планирате ефекта от този проблем. Ако резултатът е по-голям от 8 060, вашата таблица подлежи на този проблем. Освен това, ако сте изпуснали колони, трябва да промените таблицата с опция за повторно създаване. Възстановяването на таблицата може да накара заявката да върне правилните резултати.

    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 байта.

Състоянието

Microsoft потвърди, че това е проблем в продуктите на Microsoft, които са посочени в секцията "важи за".

Нуждаете ли се от още помощ?

Искате ли още опции?

Разгледайте ползите от абонамента, прегледайте курсовете за обучение, научете как да защитите устройството си и още.

Общностите ви помагат да задавате и отговаряте на въпроси, да давате обратна връзка и да получавате информация от експерти с богати знания.