2008-08-19 10 views
11

Cette erreur s'est produite aujourd'hui. Vous vous demandez si quelqu'un peut me dire ce que cela signifie:SQL Server Taille maximale des lignes

ne peut pas trier une rangée de taille 9522, ce qui est supérieur au maximum autorisé de 8094.

Est-ce que 8094 octets? Personnages? Des champs? Est-ce un problème de joindre plusieurs tables qui dépassent certaines limites?

Répondre

10

Dans SQL 2000, la limite de la ligne est 8K octets, ce qui est la même taille que une page en mémoire.

[Modifier]

En 2005, la taille de page est le même (8K), mais la base de données utilise des pointeurs sur la ligne de la page pour pointer vers d'autres pages qui contiennent des champs plus vastes. Cela permet à 2005 de surmonter la limite de taille de rangée de 8K.

0

qui était autrefois un problème dans SQL 2000, mais je pensais que a été fixé en 2005.

0

8094 octets.

Si vous donnez plus d'informations sur ce que vous faites, cela pourrait nous aider à déterminer la cause réelle.

7

Le problème qui semble attirer beaucoup de gens, c'est que vous pouvez créer une table qui détiendrait par définition plus de 8K de données, et elle l'acceptera très bien. Et la table fonctionnera bien, jusqu'à ce que vous essayez d'insérer plus de 8 Ko de données dans la table. Donc, disons que vous créez une table avec un champ entier, pour la clé primaire, et 10 champs varchar (1000). La table fonctionnerait très bien la plupart du temps, car le nombre de fois que vous remplissez tous les 10 de vos champs varchar (1000) serait très peu. Howerver, dans le même que vous avez essayé de mettre 1000 caractères dans chacun de vos champs, cela vous donnerait l'erreur mentionnée dans cette question.

+0

@Erik Kibbee : Oui, nous avons plusieurs tables avec des lignes qui sont trop grandes. J'ai soulevé la question un certain nombre de fois (notre base de données est un gâchis absolu), mais c'est un magasin d'entreprise, et personne ne veut entendre parler de problèmes structurels. Du point de vue des choses, NHibernate a caché ce problème à nous pendant un moment. Mais tout a explosé aujourd'hui sur un appel Supprimer (de toutes choses). – TheSmurf

2

Pour votre information, l'exécution de cette commande SQL sur votre base de données peut résoudre le problème si elle est causée par l'espace qui doit être remis en état après la chute des colonnes de longueur variable:

DBCC CLEANTABLE (0,[dbo.TableName]) 

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

Questions connexes