Puis-je appeler de manière dynamique une procédure stockée à partir d'un point de vue?
Plus précisément, peut-on appeler un proc de la base de données actuelle dans une vue. Je sais déjà à propos de la openrowset hack, de sorte que cela fonctionne, par exemple:
create view MyView as
select *
from openrowset (
'sqloledb',
'server=(local);trusted_connection=yes;',
'exec MyDatabase.dbo.MyStoredProcedure' -- Works fine
)
Mais je voudrais être en mesure d'appeler le proc de l'actuel DB sans coder en dur le nom comme suit:
create view MyView as
select *
from openrowset (
'sqloledb',
'server=(local);trusted_connection=yes;',
'exec ' + db_name() + '.dbo.MyStoredProcedure' -- Don't want to hard-code DB name
)
Cela ne fonctionne pas, malheureusement, que openrowset attend les chaînes littérales, plutôt que sur des variables de toute sorte.
Indépendamment de la sécurité et de considérations de performance, est-il une solution? Il serait de rendre la maintenance d'un système d'héritage beaucoup plus supportable, comme le proc que ce point de vue l'appel se connecte à une base de données différente en fonction de l'environnement (dev, test, prod).
double possible de Comment appeler une Procédure Stockée en Vue?
Eh bien, vous pouvez à l'aide de la fonction openrowset. C'est un peu un hack et, certes, je suis à la recherche d'encore plus de hack.
OriginalL'auteur Tim Lehner | 2012-05-16
Vous devez vous connecter pour publier un commentaire.
Non, vous ne pouvez pas utiliser le SQL dynamique d'un point de vue. Vous pouvez simplement créer trois points de vue si il y a seulement trois différents "milieux", et/ou de l'utilisation des synonymes en fonction de l'environnement. Ainsi, par exemple, vous pouvez avoir trois points de vue (pseudo/coupé):
Ensuite, vous pouvez utiliser le SQL dynamique dans votre code pour spécifier la vue que vous voulez, ou vous pouvez déposer et créer un synonyme quand vous voulez simuler chaque environnement, par exemple
Maintenant le code qui fait référence à dbo.Mavue sera finalement l'appel de la procédure stockée dans le dev de la base de données. L'inconvénient de cette est que seulement un synonyme peut être actif/redirection à un moment donné.
OriginalL'auteur Aaron Bertrand