Problembeschreibung
Davon ausgehen, dass Sie einer Tabelle in Microsoft SQL Server 2012 oder SQL Server 2014 eine Spalte hinzufügen. Wenn sich die Zeilengröße in der Nähe der maximal zulässigen Größe von 8.060 Bytes befindet, kann der hinzugefügte Vorgang viel Zeit in Anspruch nehmen.
Ursache
Das Problem tritt auf, weil SQL Server eine vollständige Überprüfung der Tabelle durchführt, um sicherzustellen, dass beim Hinzufügen einer neuen Spalte die Datenintegrität nicht verletzt wird, wenn sich die Gesamtgröße der Zeile in der Nähe der maximal zulässigen Zeilengröße befindet. In den Versionen vor SQL Server 2012 wird diese Überprüfung nicht durchgeführt, und dadurch wird die Datendefinitionssprache (Data Definition Language, DDL) schneller ausgeführt. Dieses Verhalten führt jedoch zu einem Fehler bei nachfolgenden Vorgängen wie Zeilenaktualisierung oder-Verkleinerung, wenn die Zeilengröße die zulässige Größe überschreitet.
Fehlerbehebung
Das kumulative Update führt ein neues Ablaufverfolgungsflags-Flag 647 für das Verhalten der Abwärtskompatibilität ein. Das Problem wurde zuerst im folgenden kumulativen Update von SQL Server behoben.
Kumulatives Update 5 für SQL Server 2014 /en-us/help/3011055
Kumulatives Update 12 für SQL Server 2012 SP1 /en-us/help/2991533
Kumulatives Update 2 für SQL Server 2012 SP2 /en-us/help/2983175
Jedes neue kumulative Update für SQL Server enthält alle Hotfixes und alle Sicherheitsupdates, die im vorherigen kumulativen Update enthalten waren. Schauen Sie sich die neuesten kumulativen Updates für SQL Server an:
Weitere Informationen
-
Sie können das Ablaufverfolgungsflag 647 mithilfe des Startup-Parameters aktivieren. Informationen finden Sie unter Startoptionen des Datenbankmodul Diensts.
-
Sie können die folgende Abfrage ausführen (Bitte ersetzen Sie <Tabellenname> durch ihren tatsächlichen Tabellennamen), um die jeweilige Tabelle vor dem Vorgang in einem Produktionssystem zu testen und die Auswirkungen dieses Problems zu planen. Wenn das Ergebnis größer als 8.060 ist, unterliegt die Tabelle diesem Problem. Wenn Sie Spalten gelöscht haben, müssen Sie darüber hinaus die Tabelle mit der Option neu erstellen ändern. Durch das erneute Erstellen der Tabelle kann die Abfrage korrekte Ergebnisse zurückgeben.
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
-
Sie können Spalten mit variabler Länge oder Spalten mit geringer Dichte hinzufügen, wenn die Anwendung häufig neue Spalten zur Tabelle hinzufügt. Es handelt sich um einen nur-Metadaten-Vorgang, auch wenn die Gesamtgröße aller Spalten 8.060 Bytes überschreitet.
Status
Microsoft hat bestätigt, dass es sich hierbei um ein Problem bei den in diesem Artikel genannten Microsoft-Produkten handelt.