如何在调用过程(在另一个数据库中)之前知道最后一个数据库

时间:2016-12-09 10:16:40

标签: sql sql-server database exec

数据库AAA中的过程的调用者: -

use AAA
exec BBB.dbo.ap_MyProc

在数据库BBB中调用的过程: -

use BBB
create procedure ap_MyProc as
print 'We want a way to return the database name AAA'

任何建议都将受到赞赏。

2 个答案:

答案 0 :(得分:0)

您的存储过程可以编辑吗?如果是,我认为您可以编辑存储过程并为数据库名称添加一个参数。

在调用存储过程期间,您应该将db_name()传递给新参数,以便您的存储过程可以知道哪个数据库正在调用它

DECLARE @ServerName varchar(50) = db_name()

EXEC [dbo].[SP] @newParams = @ServerName

答案 1 :(得分:0)

我现在可以回答我自己的问题了。我们可以利用syslockinfo ...

declare @db_name varchar(255)

select
    @db_name = db_name(rsc_dbid)
from
    master.dbo.syslockinfo
where
    req_spid = @@SPID 
    and req_ownertype = 4 --"exSession"
    and rsc_dbid <> db_id()

select @db_name = isnull(@db_name, db_name())

print @db_name

也适用于SQL 2008。 :)