Sur notre instance de production SQL2000, nous avons une base de données avec des centaines de procédures stockées, dont beaucoup utilisent une technique de création d'une table #TEMP dans le code puis diverses procédures stockées internes sont EXECUTEd par ce parent sProc. En SQL2000, le sProc interne ou "enfant" n'a aucun problème INSÉRER dans #TEMP ou SELECT des données de #TEMP. En bref, je suppose qu'ils peuvent tous se référer à ce #TEMP parce qu'ils utilisent la même connexion.L'enfant sProc ne peut pas référencer une table temporaire locale créée dans le parent sProc
Lors de tests avec SQL2008, je trouve 2 manifestations de comportement différent. Tout d'abord, au moment du design, la nouvelle fonctionnalité "intellisense" se plaint dans Management Studio EDIT de l'enfant sProc que #TEMP est un "nom d'objet invalide". Mais pire est qu'au moment de l'exécution, le parent sProc invoqué échoue à l'intérieur de l'enfant sProc imbriqué. Quelqu'un a suggéré que la solution est de changer à ## TEMP qui est apparemment une table temporaire globale qui peut être référencée à partir de différentes connexions. Cela semble une proposition trop drastique à la fois de la quantité de travail pour chasser tous les points problématiques ainsi que des effets nuisibles possibles/probables lorsque ces sProcs sont invoqués à partir d'applications Web (c'est-à-dire des problèmes multi-utilisateurs).
Est-ce vraiment un changement de comportement dans SQL2005 ou SQL2008 concernant #TEMP (tables temporaires locales)? Nous avons sauté 2005 mais j'aimerais apprendre plus précisément pourquoi cela se produit avant que je pars et essaye de pirater les corrections nécessaires. Merci.
Merci. Cela doit être quelque chose de plus subtil. Je regarderai plus profondément le ou les fauteurs de trouble. –