2011-09-07 4 views
2

J'utilise SQL Server 2008 R2.Taille de ligne maximale avec VarChar (MAX)

Je sais si j'ai une table avec 10 colonnes varchar (1000) et je mets réellement 1000 caractères dans chacune de ces colonnes et essaye d'INSÉRER cette ligne j'obtiendrai une erreur due à la limite de rangée de SQL Server de 8K. Cependant, si ces colonnes sont définies comme varchar (max) aurais-je une erreur?

Si non alors qu'en est-il le scénario suivant: J'ai 8 varchar (1000) colonnes que j'excède plus j'ai 2 colonnes varchar (max) tout sur une table avec quelques caractères dans eux. Aurais-je une erreur?

Je pense que la réponse est non, je ne recevrais pas d'erreur dans les deux cas, mais je dois être sûr.

Répondre

4

Votre hypothèse d'origine est incorrect depuis SQL Server 2005.

Le cas varchar(1000) se retrouverait avec des colonnes stockées offrow donc il n'y a pas de raison de déclarer 2 de vos colonnes comme varchar(max) plutôt que varchar(1000) juste pour éviter ce non problème existant. SQL Server doit suivre les pointeurs de la page de données vers la page hors ligne. Si vous pensez qu'il s'agit d'un cas fréquent, vous pouvez envisager de partitionner verticalement la table d'une manière ou d'une autre.

+0

J'utilise varchar (max) beaucoup pour les longues colonnes de description où je ne veux pas limiter la quantité de caractères qu'un utilisateur peut choisir de mettre en clé. Je ne sais pas si l'un d'entre eux a dépassé 8K, mais je n'ai pas remarqué de baisse de performance. J'imagine que la majorité des frais généraux de performance est si vous avez réellement> 8K dans la colonne. Merci pour la réponse rapide. –