在sp_ procs中从dbo.sysobjects移动到sys.tables

时间:2012-10-04 00:40:23

标签: sql-server stored-procedures sysobjects

我曾经在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中产生MyOtherDb中的表的列表 - 因此在编写这些内容时,我有义务将我的代码包装在一个字符串中并动态执行,这一点尤其困难一旦我已经是编写代码的一两层代码。

任何人都有解决这个问题的方法吗?我敢肯定,我不是那里唯一一个对此嗤之以鼻的人!

1 个答案:

答案 0 :(得分:0)

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

exec sp_MS_marksystemobject 'sp_test'