如何知道我的程序最初被调用的数据库

问题描述 投票:0回答:1

我正在开发一个存储过程,我想知道它最初是从哪里被调用的,我的意思是,当我调用我的过程时我在哪个数据库中。

如果可能的话,我想在没有参数的情况下实现这一点。

我知道带有默认参数的程序,尽管我无法将

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

enter image description here

sql-server stored-procedures parameters parameter-passing
1个回答
0
投票

您可以使用

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;

db<>小提琴

© www.soinside.com 2019 - 2024. All rights reserved.