存储过程范围:使用另一个数据库中的sp

jjo*_*ras 4 sql sql-server stored-procedures sql-server-2008

我在一个名为的数据库中有一个名为PROC_fetchTableInfo的存储过程(从sys.tables中简单选择)

Cust
Run Code Online (Sandbox Code Playgroud)

我想在另一个名为的数据库中使用此过程

Dept
Run Code Online (Sandbox Code Playgroud)

我尝试使用命令在此数据库中执行此sp

EXECUTE Cust.dbo.PROC_fetchTableInfo
Run Code Online (Sandbox Code Playgroud)

但结果我从数据库Cust获取表.如何让这个程序在数据库部门工作?

Rem*_*anu 6

存储过程与其代码中的对象紧密绑定.如果Cust.dbo.PROC_fetchTable引用一个表T,那就是数据库T中模式dbo中的表Cust.您可以从任何其他地方调用该过程,它将始终引用此表.

如果你需要在另一个数据库中的另一个表中运行相同的过程,那么到目前为止,最好的解决方案是使用新的过程:Dept.dbo.PROC_fetxTableInfo.这比使用Dynamic-SQL的替代方案更好.虽然从DRY和代码重用的角度来看这似乎是违反直觉的,但是T-SQL是一种数据访问语言,它不是一种编程语言,当你进入数据库时​​,你的C/C#思维模式会被置于门外.只需在Dept数据库中有另一个过程.