0

以前は、データベースに依存しないストアド プロシージャを 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

masterNOT 内のテーブルのリストが生成されます。MyOtherDbしたがって、このようなものを作成するときは、コードを文字列でラップして動的に実行する必要があります。コードを書きます。

誰でもこの問題の解決策を持っていますか? これに頭をぶつけたのは私だけではないと確信しています!

4

1 に答える 1

0

ああ!システム オブジェクトとしてマークする必要があります。

exec sp_MS_marksystemobject 'sp_test'

于 2012-10-04T00:51:16.287 に答える