web-dev-qa-db-fra.com

Nombre maximal d'octets / ligne de SQL Server 2016

Nous avons une base de données tierce qui a une table avec plus de 300 colonnes, et dans SQL Server 2012, nous obtenons une erreur que nous dépassons le maximum autorisé 8060 octets. Je me demandais si la mise à niveau vers SQL Server 2016 serait utile.

SQL Server 2016 a-t-il également une limitation de 8060 octets? Est-il possible d'avoir plus de colonnes dans SQL Server 2016 sans rencontrer l'erreur ci-dessous?

Erreur: la table "X" a été créée, mais sa taille de ligne maximale dépasse le maximum autorisé de 8060 octets. INSERT ou UPDATE dans cette table échouera si la ligne résultante dépasse la limite de taille.

5
Nancy

Cette limitation repose sur la structure de page physique principale dans SQL Server et, non, cela n'a pas changé dans SQL Server 2016 (et ne le sera pas non plus dans SQL Server 2017).

Il existe cependant des moyens de contourner ce problème. Le plus important est de diviser certaines données plus volumineuses dans un tableau séparé. Ou simplement vivre avec le message d'avertissement si vous savez que vos données ne rempliront jamais toutes les colonnes de la même ligne (ou vous pouvez l'empêcher).

Ou revenir à la troisième partie et voir pourquoi ils ont cela et comment ils évitent les problèmes de ligne réels.

12
Aaron Bertrand

C'est ainsi que fonctionne SQL Server et il existe des limitations pour le rendre plus performant car la limite de pages est de 8 Ko pour toutes les versions de SQL Server.

Coller quelque chose de msdn qui sera utile:

https://msdn.Microsoft.com/en-us/library/ms186981 (v = sql.105) .aspx

Données de dépassement de ligne dépassant 8 Ko

Une table peut contenir au maximum 8 060 octets par ligne. Dans SQL Server 2008, cette restriction est assouplie pour les tables qui contiennent des colonnes de type défini par l'utilisateur varchar, nvarchar, varbinary, sql_variant ou CLR. La longueur de chacune de ces colonnes doit toujours se situer dans la limite de 8 000 octets; cependant, leurs largeurs combinées peuvent dépasser la limite de 8 060 octets. Cela s'applique aux colonnes de type défini par l'utilisateur varchar, nvarchar, varbinary, sql_variant ou CLR lorsqu'elles sont créées et modifiées, ainsi que lorsque les données sont mises à jour ou insérées.

5
Ramakant Dadhichi

Je ne peux pas améliorer les explications ci-dessus, mais je voudrais vous suggérer d'envisager la normalisation. Il existe de nombreux formulaires, mais dans les conceptions de bases de données correctement normalisées, cette limite de lignes est rarement atteinte.

Il y a tellement de bonnes lectures sur ce sujet mais c'est une bonne introduction ...

Article de normalisation

0
Ollie