2017-03-21 7 views
0

Récemment, j'ai rencontré un problème où j'atteignais la limite de 8060 lignes lors de l'exécution d'une requête dynamique SELECT INTO #TempTable .... Cette table temporaire a été utilisée à son tour dans une opération JOIN et une opération PIVOT. Comme j'obtenais le problème de limite de ligne, j'ai ajouté la requête SELECT en tant que requête en ligne dans la requête plus grande (les deux sont des requêtes SQL dynamiques) mais posait toujours le problème de limite de 8060 lignes. tables sous le capot lors de l'exécution.Les requêtes en ligne de SQL Server créent-elles des tables temporaires sous le capot?

L'erreur que je vois est donné ci-dessous,

« Impossible de créer une ligne de taille XXXX qui est supérieure à la taille maximale de ligne admissible de 8060 »

Répondre

3

SQL Server peut utiliser une technique appelée Spooling dans laquelle il crée une structure similaire à une table temporaire dans tempdb. Il le fera, en général, lorsqu'il a un résultat intermédiaire qu'il doit utiliser plus d'une fois et il pense que le coût de stockage et de récupération de ces données sera inférieur au coût de la régénération du produit intermédiaire. résultat.

Vous pouvez être en mesure d'identifier que cela se produit en générant un Estimated Execution Plan pour votre requête. Malheureusement, il n'y a aucune garantie que les plans estimés seront identiques aux plans réels générés par la requête.

+0

C'était Spooling et la partie triste est qu'il ne peut pas être éteint :( – Padmika

0

La plupart du temps C'est un pointeur clair que quelque chose ne va pas avec votre conception de base de données/table.

Pouvez-vous ajouter la requête que vous essayez d'exécuter à votre message?

More information about this particular error can also be found here.

+2

Ce n'est pas nécessairement un pointeur clair que quelque chose ne va pas avec la conception de la base de données ou de la table. C'est généralement un pointeur clair que quelque chose peut être amélioré dans vos requêtes. Vérifiez la réponse de @Damien_The_Unbeliever. –

+0

Vous avez raison de dire que le problème existe probablement dans la requête elle-même. Mais je fais référence au fait que dans la majorité des cas dont j'ai été témoin, la requête est devenue gonflée et désordonnée, parce que le développeur de la base de données doit utiliser des constructions étranges et compliquées pour compenser la conception sous-optimale de la table. la ou les bases de données. Étant donné que l'OP fait référence à une grande opération de jointure et de pivotement, mais n'a pas inclus une requête réelle, je suppose que c'est le cas ici. –

+0

En outre, je ne pense pas que l'opération de spouleur que vous voyez dans un plan d'exécution ait quelque chose à voir avec l'erreur que l'OP est en train d'obtenir. OP devrait publier la requête actuelle afin de nous donner une réponse adéquate, au lieu de nous deviner tous sur ce qui pourrait causer ce problème. –