2012-10-04 2 views
0

J'avais l'habitude d'écrire des procédures stockées agnostiques de base de données en les créant en master avec le préfixe sp_ et en faisant référence à dbo.sysobjects, qui à l'exécution se lierait à n'importe quelle base de données pour être en.Passage de dbo.sysobjects à sys.tables dans sp_processus

Finalement, j'ai essayé de migrer mon code pour utiliser les sys.tables les plus récents et les plus conviviaux qui se lient à la base de données où le proc stocké a été compilé et retourne ainsi les mauvaises données.

exemple:

use master 
go 
create proc sp_test 
as 
    select name 
    from sys.tables 
go 
use MyOtherDb 
go 
exec sp_test 
go 

donnera une liste des tables en master pas dans MyOtherDb - par conséquent, lors de l'écriture ce genre de choses maintenant, je suis obligé d'envelopper mon code dans une chaîne et d'exécuter de façon dynamique, ce qui est particulièrement difficile une fois que je suis déjà une couche ou deux profonds dans le code qui écrit le code.

Quelqu'un at-il une solution à ce problème? Je suis sûr que je ne suis pas le seul gars qui a battu sa tête contre ça!

Répondre

0

ah! Je dois marquer comme objet système:

exec sp_MS_marksystemobject 'sp_test'