Je dois créer une table temporaire dans l'une de mes procédures stockées. Les données à insérer dans la table temporaire sont dérivées d'une requête de pivot dynamique - d'où je suis lié à SQL dynamique. Ainsi, il devient quelque chose comme ça -Comment concevoir l'utilisation de la table temporaire Global pour un environnement multi-utilisateur? (ou alternatives)
set query = 'select ....'+ pivotcols +
' into ##temp_table
from base_table
pivot (
max(col1)
for col2 in
(' + pivotcols +' as final'
exec(query)
Ici, je ne peux pas utiliser la table temporaire locale (#temp_table), depuis la table créée dans le SQL dynamique ne sera pas disponible pour le reste de la procédure stockée. Donc, je finis par utiliser une table temporaire globale (## temp_table).
Maintenant, le problème est que s'il y a une sortie imprévue du proc stocké où la table ne tombe pas correctement, il peut déclencher des exceptions quand quelqu'un d'autre essaie d'utiliser le même sp. Même sans exception, si deux personnes exécutent la même procédure, il peut y avoir des problèmes. Y-a t'il une solution à ce problème? Toutes les alternatives que je peux utiliser?
Remarque: Je dois utiliser SQL dynamique - la requête pivot ne peut être dynamisée d'aucune autre manière, car les colonnes qui seront pivotées sont décidées au moment de l'exécution. Mais je suis flexible à la façon dont les données vont réellement dans la table temporaire.
EDIT: sous la direction « variable » dans la question à la rubrique « table »
D'une part, vous dites que vous devez utiliser SQL dynamique pour construire la table temporaire, parce que la structure de la table est déterminée à (colonnes pivotée) d'exécution, mais D'un autre côté, vous dites que le reste de votre sproc n'utilise pas SQL dynamique? Quoi qu'il en soit, l'utilisation de SQL dynamique pour le reste du proc serait le meilleur. –
C'est une surcharge inutile. J'ai juste besoin de faire 'select t. * From ## temp ..' avec une jointure sur d'autres tables pour retourner le jeu de résultats à l'application. Je cherche d'autres options si possible avant de tout rendre dynamique. –