Supposons que j'ai une procédure stockée qui est dupliquée, avec quelques modifications, dans plusieurs bases de données. Et je veux faire référence à la base de données dans laquelle la procédure stockée est stockée, même si elle est exécutée dans une autre base de données.
Existe-t-il un moyen de récupérer le chemin d'accès complet (..) ou de récupérer la base de données dans laquelle la procédure stockée est stockée, plutôt que la base de données actuelle?
sql-server
stored-procedures
Jim Clark
la source
la source
Réponses:
Utilisez simplement des noms en une ou deux parties dans la procédure stockée, et elle référencera les objets dans la base de données contenant la procédure stockée. En particulier,
Pour SQL statique dans une procédure stockée:
Les noms d'objet non qualifiés seront résolus par rapport au schéma contenant la procédure stockée.
Les noms en deux parties seront résolus par rapport à la base de données contenant la procédure stockée.
Pour SQL dynamique dans une procédure stockée:
Les noms d'objet non qualifiés seront résolus par rapport au schéma par défaut de l'identité de l'utilisateur exécutant la procédure stockée (par défaut, l'appelant).
Les noms en deux parties seront résolus par rapport à la base de données contenant la procédure stockée.
La fonction db_name () renverra le nom de la base de données contenant la procédure stockée dans les deux cas.
la source
Voici un exemple rapide que j'ai rassemblé montrant les fonctions courantes utilisées pour se rapprocher de ce que vous recherchez.
la source
Ajoutant à l'excellente réponse de David Browne :
Vous avez de la chance, car c'est ainsi que les procédures stockées régulières / permanentes non système fonctionnent déjà de cette façon, et vous devez en fait faire tout votre possible pour que les objets fonctionnent dans la base de données actuelle. C'est ainsi que fonctionnent les fonctions, c'est juste qu'avec les procédures stockées, vous avez des options - les marquer comme "procédures stockées système" ou créer des procédures stockées temporaires - que vous n'avez pas avec les fonctions / vues / déclencheurs / etc.
Étant donné que les fonctions intégrées se comportent légèrement différemment du SQL statique dans les procédures stockées temporaires, l'exemple suivant utilise une table non temporaire pour référencer à la fois un UDF et Inline-TVF. Certes, l'exemple suivant ne teste pas réellement les procédures stockées temporaires, mais la raison pour laquelle j'ai utilisé la table non temporaire est parce que comme nous avons une instance de comportement différent, nous devons nous assurer que ce comportement ne se produit pas ici. Dans l'exemple suivant, si l'un ou l'autre type de fonction connaissait la base de données "actuelle", la référence à la table non temporaire provoquerait une erreur.
INSTALLER
TESTER
la source