0

我曾经通过在 master 中使用前缀创建它们并引用 dbo.sysobjects 来编写与数据库无关的存储过程sp_,它在运行时将绑定到我碰巧所在的任何数据库。

最终我尝试迁移我的代码以使用更新、更友好的 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 in 中生成一个表列表MyOtherDb- 因此,现在在编写这些内容时,我有义务将我的代码包装在一个字符串中并动态执行它,一旦我已经深入一两层代码,这尤其困难写代码。

有人有解决这个问题的方法吗?我敢肯定,我不是唯一一个对此大发雷霆的人!

4

1 回答 1

0

啊!我需要标记为系统对象:

exec sp_MS_marksystemobject 'sp_test'

于 2012-10-04T00:51:16.287 回答