Príznaky
Predpokladajme, že pridáte stĺpec do tabuľky v Microsoft SQL Server 2012 alebo SQL Server 2014. Keď sa veľkosť riadka blíži maximálnej povolenej veľkosti 8 060 bajtov, operácia pridávania môže trvať pomerne dlho.
Príčina
Problém sa vyskytuje, pretože keď sa celková veľkosť riadka blíži maximálnej povolenej veľkosti riadka, SQL Server vykoná úplnú kontrolu tabuľky, aby sa zabezpečilo, že pridanie nového stĺpca nenaruší integritu údajov. Verzie staršie ako SQL Server 2012 túto kontrolu nevykonávajú, čím sa zrýchli jazyk DDL (Data Definition Language). Ak však veľkosť riadka prekročí povolenú veľkosť, toto správanie má za následok zlyhanie následných operácií, ako je napríklad aktualizácia alebo zmenšenie riadka.
Riešenie
Kumulatívna aktualizácia zavádza nový príznak sledovania 647 pre správanie spätnej kompatibility.
Tento problém bol prvýkrát opravený v nasledujúcej kumulatívnej aktualizácii SQL Server.
Kumulatívna aktualizácia 5 pre SQL Server 2014 /en-us/help/3011055
Kumulatívna aktualizácia 12 pre SQL Server 2012 SP1 /en-us/help/2991533
Kumulatívna aktualizácia 2 pre SQL Server 2012 SP2 /en-us/help/2983175
Informácie o kumulatívnych aktualizáciách pre SQL Server
Každá nová kumulatívna aktualizácia pre SQL Server obsahuje všetky rýchle opravy a opravy zabezpečenia, ktoré boli zahrnuté v predchádzajúcej kumulatívnej aktualizácii. Pozrite si najnovšie kumulatívne aktualizácie pre SQL Server:
- Najnovšia kumulatívna aktualizácia pre SQL Server 2014
- Najnovšia kumulatívna aktualizácia pre SQL Server 2012 SP1
- Najnovšia kumulatívna aktualizácia pre SQL Server 2012 SP2
Ďalšie informácie
Pomocou parametra spúšťania môžete zapnúť príznak sledovania 647. Ďalšie informácie nájdete v téme Možnosti spustenia služby databázového stroja.
Môžete spustiť nasledujúci dotaz (Nahraďte <názov> tabuľky skutočným názvom tabuľky) a otestovať konkrétnu tabuľku pred operáciou v produkčnom systéme a naplánovať vplyv tohto problému. Ak je výsledok väčší ako 8 060, problém sa týka tohto problému s tabuľkou. Ak ste navyše vynechali stĺpce, musíte tabuľku zmeniť pomocou možnosti Znova zostaviť. Po opätovnom zostavení tabuľky môže dotaz vrátiť správne výsledky.
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 =1Ak vaša aplikácia často pridáva nové stĺpce do tabuľky, môžete zvážiť pridanie stĺpcov s premenlivou dĺžkou alebo riedke stĺpce. Ide o operáciu iba s metaúdajmi, a to aj v prípade, že celková veľkosť všetkých stĺpcov presahuje 8 060 bajtov.
Stav
Spoločnosť Microsoft potvrdila, že ide o problém v produktoch spoločnosti Microsoft, ktoré sú uvedené v časti Vzťahuje sa na.