以前は、データベースに依存しないストアド プロシージャを master で作成し、sp_
プレフィックスを付けて dbo.sysobjects を参照していました。これは、実行時に、たまたま存在するデータベースにバインドされます。
最終的に、コードを移行して、より新しく使いやすい sys.tables を使用しようとしましたが、ストアド プロシージャがコンパイルされたデータベースにバインドされ、間違ったデータが返されます。
例:
use master
go
create proc sp_test
as
select name
from sys.tables
go
use MyOtherDb
go
exec sp_test
go
master
NOT 内のテーブルのリストが生成されます。MyOtherDb
したがって、このようなものを作成するときは、コードを文字列でラップして動的に実行する必要があります。コードを書きます。
誰でもこの問題の解決策を持っていますか? これに頭をぶつけたのは私だけではないと確信しています!