Impossible de créer une ligne de taille 8937 supérieure au maximum autorisé de 8060
Nous obtenons cette erreur sur une table dans notre base de données:
Impossible de créer une ligne de taille 8937 qui est supérieur à la limite permise
maximum de 8060.
La table se compose d'environ 400 varchar(max)
champs. Nous sommes, cependant, seule l'insertion des chaînes vides dans ces domaines.
L'insertion semble fonctionner, cependant lors de l'utilisation de SqlXml
pour lire les données ou lors de l'exécution de DBCC DBREINDEX
sur la clé primaire de la table, l'erreur se produit.
Il est produit uniquement sur un particulier SQL Server (2005)
et pas sur d'autres (2005 Express). Le problème de la machine est en cours d'exécution 64-bit Windows
et les autres sont en cours d'exécution 32-bit windows
.
Quiconque a une idée à ce propos? S'il vous plaît laissez-moi savoir si j'ai besoin d'inclure plus d'informations.
Avoir lu certains de vos réponses, je tiens à souligner que je suis complètement d'accord que c'est plutôt extrême, insolite et pas du tout sensible à la tentative d'utilisation de ce nombre de colonnes varchar(max). Il y a des raisons pour ça, surtout pas sous mon contrôle, que je ne vais pas entrer dans les ici.
source d'informationauteur Simon Williams
Vous devez vous connecter pour publier un commentaire.
L'erreur est dû au fait que vous ne pouvez pas avoir une ligne de SQL server qui est plus grand que 8 KO (1 page), car les lignes ne sont pas autorisés à durée de pages - son une limite de base de SQL Server, vous pouvez en lire plus à ce sujet ici:
Noter que SQL server vous permettra de créer la table, cependant, si vous essayez de l'insertion de toutes les données qui s'étend sur plusieurs pages, puis il donnera l'erreur ci-dessus.
Bien sûr, ce n'est pas tout à fait exact parce que si le ci-dessus a été toute la vérité unique
VARCHAR(8000)
colonne de remplir une ligne dans une table! (C'est le cas). SQL Server 2005 a autour de cette limitation en permettant à certaines données à partir d'une ligne à être stocké dans une autre page, et au lieu de laisser un pointeur de 24 octets au lieu de cela. Vous pouvez lire à ce sujet ici:Comme vous pouvez le voir maintenant, signifie que les lignes peuvent maintenant s'étendre sur plusieurs pages, cependant seul les lignes de colonnes encore besoin de tenir dans une seule page (donc la taille maximale d'une colonne
VARCHAR(8000)
) et il y a toujours une limite sur le nombre total de ces colonnes, vous pouvez avoir (environ 8000 /24 = ~300 par mon estimation)Bien sûr, tout ceci est manquant le point principal, de ce qui est 400 large colonnes sur une seule table est absurde!!!
Vous devriez prendre un long regard dur à votre schéma de base de données et de venir avec quelque chose de plus raisonnable - vous pourriez commencer par le choix de certaines des estimations plus prudentes sur les tailles de colonne (comme
VARCHAR(255)
ouVARCHAR(50)
), mais vous avez vraiment besoin de partager certains de ces champs dans des tables séparées.Vous pourriez avoir une suppression de la colonne dans la table qui monte encore de l'espace. Également cocher la case "texte en ligne" les paramètres sont les mêmes.
La taille de la ligne est déterminée par les types de colonnes, pas de la quantité de données que vous stockez dans.
400 champs varchar dans une seule table me dit que vous faites quelque chose de mal. Peut-être vous avez besoin de normaliser le schéma?