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

Simptomi

Pieņemiet, ka varat pievienot kolonnu tabulai programmā Microsoft SQL Server 2012 vai SQL Server 2014. Ja rindas lielums ir tuvs maksimālais atļautais lielums, kas ir 8 060 baiti, pievienošanas operācija var aizņemt ilgu laiku.

Cēlonis

Problēma rodas tāpēc, ka, ja rindas kopējais lielums ir tuvs maksimālajiem atļautajiem rindas izmēriem, SQL Server veic pilnu tabulas skenēšanu, lai nodrošinātu, ka tiek pievienota jauna kolonna, kas nepārkāpj datu integritāti. Versijas pirms SQL Server 2012 neveic šo pārbaudi, un tādējādi datu definēšanas valoda (DDL) darbojas ātrāk. Tomēr šī darbība izraisa tādu turpmāko darbību neveiksmes kā rindas atjaunināšana vai samazināšana, ja rindas lielums pārsniedz atļauto lielumu.

Katrā jaunajā kumulatīvajā SQL Server atjauninājumā ir iekļauti visi labojumfaili un visi drošības labojumi, kas bija iekļauti iepriekšējā kumulatīvajā atjauninājumā. Skatiet jaunākos kumulatīvos atjauninājumus SQL Server:

Papildinformācija

  • Varat ieslēgt izsekošanas karodziņu 647, izmantojot startēšanas parametru. Informāciju skatiet rakstā datu bāzes programmas startēšanas opcijas.

  • Varat izpildīt šādu vaicājumu (Lūdzu, aizstājiet <tabulas nosaukumu> ar faktisko tabulas nosaukumu), lai pārbaudītu konkrētu tabulu pirms operācijas ražošanas sistēmā un plānotu šīs problēmas ietekmi. Ja rezultāts ir lielāks par 8 060, uz jūsu tabulu attiecas šī problēma. Turklāt, ja esat nometuši kolonnas, ir jāmaina tabula ar atjaunošanas opciju. Pārveidojot tabulu, vaicājumam ir jāatgriež pareizs rezultāts.

    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 
  • Jūs varat apsvērt iespēju pievienot mainīgu garuma kolonnas vai mazapdzīvotas kolonnas, ja lietojumprogrammā bieži tiek pievienotas tabulas ar jaunām kolonnām. Tā ir tikai metadatu operācija pat tad, ja visu kolonnu kopējais lielums pārsniedz 8 060 baitus.

Statusa

Microsoft ir apstiprinājusi, ka šī problēma pastāv Microsoft produktos, kas ir norādīti sadaļā "attiecas uz".

Nepieciešama papildu palīdzība?

Vēlaties vairāk opciju?

Izpētiet abonementa priekšrocības, pārlūkojiet apmācības kursus, uzziniet, kā aizsargāt ierīci un veikt citas darbības.