-
portée des tables #
bonjour
je voudrais une confirmation
j'ai un trigger (T-SQL) qui créé une table temporaire avec un seul # (via select into)
ce trigger appelle une procédure stockée CLR (enfin ca doit etre similaire d'une procédure stockée T-SQL)
(déjà à priori la procédure stockée a accès à cette table # et la table # est détruite à la fin de l'éxécution du trigger)
y a t il une instance de cette table # pour chaque instance du trigger ?
enfin je veux dire par là si le trigger est executé plusieurs fois simultanément par le meme utilisateur, suite à plusieurs requetes, est-ce une seule table # qui est utilisée, ou plusieurs (une créé par chaque instance du trigger)
question subsidiaire, y a t il moyen d'executer cette procédure stockée de manière asynchrone pour sortir tout de suite du trigger (pour que la main soit rendu à l'appelant avec sa requete d'update)
-
Les tables # sont des tables temporaires locales. Elles sont accessibles que dans le contexte de la procédure stockée ou du trigger qui la crée.
Pour répondre à ta seconde interrogation, à chaque fois que ton trigger est appelé une nouvelle table temporaire sera créée. Toutes ces tables sont totalement différentes car elles ne portent pas le même nom dans le système.
Je m'explique, il y a une relation effectuée entre le nom réel et le nom logique de la table en fonction de l'objet qui la créé. Sachant que chaque exécution est unique dans SQL Server, les tables temporaires locales seront toutes différentes.
Si tu as d'autres questions, n'hésites pas.
-
merci bien, ca me rassure
je l'ai su en plus à une époque que les tables # avaient en fait un nom de 128 ou 256 caractères en interne pour les différencier ^^