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!