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).

Non, vous ne pouvez pas appeler une procédure stockée
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