2008-08-19 5 views
11

Ist heute auf diesen Fehler gestoßen. Frage mich, ob jemand kann mir sagen, was es bedeutet:SQL Server Maximale Zeilengröße

nicht eine Reihe von Größe 9522 sortieren, die größer ist als die zulässige Maximum von 8094.

Ist das 8094 Bytes? Figuren? Felder? Ist das ein Problem, mehrere Tabellen zu verbinden, die ein Limit überschreiten?

Antwort

10

In SQL 2000 ist das Zeilenlimit 8K Bytes, die die gleiche Größe wie eine Seite im Speicher.

[Bearbeiten]

Im Jahr 2005 ist die Seitengröße das gleiches (8K), aber die Datenbank verwendet Zeiger auf der Zeile in der Seite zu anderen Seiten zu verweisen, die größeren Felder enthalten. Dies ermöglicht 2005, die 8K Zeilengrößenbeschränkung zu überwinden.

0

, dass ein Problem in SQL 2000 verwendet werden sollte, aber ich dachte, dass im Jahr 2005

0

8094 Byte festgelegt wurde.

Wenn Sie einige weitere Informationen zu dem, was Sie tun, auflisten, könnte es uns helfen, die tatsächliche Ursache herauszufinden.

7

Das Problem, das eine Menge Leute zu fangen scheint, ist, dass Sie eine Tabelle erstellen können, die definitionsgemäß mehr als 8K Daten enthalten würde, und sie wird es gut akzeptieren. Und die Tabelle funktioniert gut, bis zu dem Punkt, an dem Sie tatsächlich versuchen, mehr als 8.000 Daten in die Tabelle einzufügen.

Nehmen wir an, Sie erstellen eine Tabelle mit einem Integer-Feld für den Primärschlüssel und 10 Varchar (1000) -Feldern. Die Tabelle würde die meiste Zeit gut funktionieren, da die Anzahl von Malen, die Sie alle 10 Ihrer varchar (1000) Felder füllen würden, sehr wenige sein würde. Aber selbst wenn Sie versucht haben, 1000 Zeichen in jedes Ihrer Felder zu setzen, würde es Ihnen den Fehler geben, der in dieser Frage erwähnt wird.

+0

@Erik Kibbee : Ja, wir haben mehrere Tabellen mit zu großen Zeilen. Ich habe das Thema mehrmals angesprochen (unsere Datenbank ist ein absolutes Durcheinander), aber es ist ein Firmenladen, und niemand möchte von strukturellen Problemen hören. Aus der Sicht der Dinge hat NHibernate dieses Problem für eine Weile vor uns versteckt. Aber alles explodierte heute auf einem Remove Anruf (von allen Dingen). – TheSmurf

2

FYI, diesen SQL-Befehl auf Ihrer DB ausgeführt wird, kann das Problem beheben, wenn es durch den Raum verursacht, die nach dem Abwurf Spalt mit variabler Länge zurückgewonnen werden muss:

DBCC CLEANTABLE (0,[dbo.TableName]) 

See: http://msdn.microsoft.com/en-us/library/ms174418.aspx

Verwandte Themen