Gjelder for
SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2012 Developer SQL Server 2012 Enterprise SQL Server 2012 Standard SQL Server 2012 Developer SQL Server 2012 Enterprise SQL Server 2012 Standard

Symptomer

Anta at du legger til en kolonne i en tabell i Microsoft SQL Server 2012 eller SQL Server-2014. Når størrelsen på raden er nær den maksimale tillatte størrelsen som er 8,060 byte, kan det ta lang tid å legge til operasjonen.

Årsak

Dette problemet oppstår fordi når den totale størrelsen på raden er nær den maksimalt tillatte radstørrelsen, SQL Server utfører en fullstendig skanning av tabellen for å sikre at du legger til en ny kolonne ikke bryter retningslinjene for dataintegritet. Versjoner før SQL Server 2012 ikke gjør denne kontrollen, og som gjør datadefinisjonsspråk (DDL) kjører raskere. Denne virkemåten fører imidlertid til feil i etterfølgende operasjoner som for eksempel rad oppdatering eller redusere Hvis radstørrelsen overstiger tillatt størrelse.

Hver nye kumulative oppdateringen for SQL Server inneholder alle hurtigreparasjonene og alle sikkerhetsreparasjoner som fulgte med den forrige kumulative oppdateringen. Sjekk ut de nyeste kumulative oppdateringene for SQL Server:

Hvis du vil ha mer informasjon

  • Du kan aktivere sporingsflagg 647 ved å bruke oppstartsparameteren. For informasjon, kan du se Database Engine alternativer for tjenesteoppstart.

  • Du kan kjøre følgende spørring (må erstatte < navn > med navnet ditt faktiske tabellen) for å teste den bestemte tabellen før operasjonen på et produksjonssystem, og planlegge virkningen av dette problemet. Hvis resultatet er større enn 8,060, er tabellen utsatt for dette problemet. Hvis du har fjernet kolonner, må du i tillegg endre tabell med alternativet Gjenoppbygg. Gjenoppbygging av tabellen, kan du gjøre spørringen returnerer riktige resultater.

    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 
  • Du kan vurdere å legge til kolonner med variabel lengde eller sparsommelig når programmet ofte legger til nye kolonner i tabellen. Det er en bare metadata-operasjon selv om den totale størrelsen på alle kolonnene overskrider 8,060 byte.

Status

Microsoft har bekreftet at dette er et problem i Microsoft-produktene som er oppført i delen "Gjelder for".

Trenger du mer hjelp?

Vil du ha flere alternativer?

Utforsk abonnementsfordeler, bla gjennom opplæringskurs, finn ut hvordan du sikrer enheten og mer.