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

Symptomy

Załóżmy, że dodano kolumnę do tabeli w programie Microsoft SQL Server 2012 lub SQL Server 2014. Jeśli rozmiar wiersza jest bliski dopuszczalnego rozmiaru 8 060 bajtów, operacja dodawania może trwać długo.

Przyczyna

Ten problem występuje, ponieważ jeśli całkowity rozmiar wiersza jest bliski dopuszczalnego rozmiaru wiersza, program SQL Server przeprowadza pełne skanowanie tabeli w celu upewnienia się, że dodanie nowej kolumny nie narusza integralności danych. Wersje przed wykonaniem programu SQL Server 2012 nie wykonują tego sprawdzenia, co sprawia, że język definicji danych (DDL) działa szybciej. Jednak to zachowanie powoduje niepowodzenie kolejnych operacji, takich jak aktualizacja wierszy lub zmniejszenie, jeśli rozmiar wiersza przekracza dozwolony rozmiar.

Każda nowa Zbiorcza aktualizacja programu SQL Server zawiera wszystkie poprawki i wszystkie poprawki zabezpieczeń uwzględnione w poprzedniej aktualizacji zbiorczej. Zapoznaj się z najnowszymi aktualizacjami zbiorczymi dla programu SQL Server:

Więcej informacji

  • Flagę śledzenia 647 można włączyć przy użyciu parametru uruchamiania. Aby uzyskać informacje, zobacz Opcje uruchamiania usług aparatu bazy danych.

  • Aby przetestować określoną tabelę przed operacją w systemie produkcyjnym i zaplanować jej wpływ, możesz uruchomić następującą kwerendę (Zastąp <nazwy tabeli> nazwą bieżącej tabeli). Jeśli wynik jest większy niż 8 060, tabela podlega temu problemowi. Ponadto, jeśli kolumny zostały opuszczone, należy zmienić tabelę za pomocą opcji Odbuduj. Odbudowanie tabeli może sprawić, że zapytanie zwróci odpowiednie wyniki.

    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 
  • Jeśli aplikacja często dodaje nowe kolumny do tabeli, możesz dodać kolumny lub kolumny rozrzedzone o zmiennej długości. Jest to operacja tylko z metadanymi, nawet jeśli całkowity rozmiar wszystkich kolumn przekracza 8 060 bajtów.

Stan

Firma Microsoft potwierdziła, że jest to problem występujący w produktach firmy Microsoft wymienionych w sekcji "dotyczy".

Potrzebujesz dalszej pomocy?

Chcesz uzyskać więcej opcji?

Poznaj korzyści z subskrypcji, przeglądaj kursy szkoleniowe, dowiedz się, jak zabezpieczyć urządzenie i nie tylko.

Społeczności pomagają zadawać i odpowiadać na pytania, przekazywać opinie i słuchać ekspertów z bogatą wiedzą.