我曾经通过在 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
- 因此,现在在编写这些内容时,我有义务将我的代码包装在一个字符串中并动态执行它,一旦我已经深入一两层代码,这尤其困难写代码。
有人有解决这个问题的方法吗?我敢肯定,我不是唯一一个对此大发雷霆的人!