我正在开发一个存储过程,我想知道它最初是从哪里被调用的,我的意思是,当我调用我的过程时我在哪个数据库中。
如果可能的话,我想在没有参数的情况下实现这一点。
我知道带有默认参数的程序,尽管我无法将
db_name()
作为默认参数,否则这将是解决方案。
我也知道函数作为默认参数值虽然也许我可以以某种方式完成它?
我现在得到的是通过参数,但它有点蹩脚。
select @@SERVERNAME
use master
go
create or alter procedure whereami
@origin sysname = null
as
begin
print @origin
select [inside the procedure] = @origin
end
go
use [database one]
select db_name()
declare @a sysname = db_name()
use [database two]
select db_name()
exec master.dbo.whereami @origin = @a
sys.dm_exec_sessions
来获取此信息。
SELECT
d.name AS ConnectingDatabaseName
FROM sys.dm_exec_sessions s
JOIN sys.databases d ON d.database_id = ISNULL(NULLIF(s.authenticating_database_id, 0), s.database_id)
WHERE s.session_id = @@SPID;