获取正在链接服务器中执行查询的服务器名称

Getting server name who is executing query in a linked Server

在 SQL 服务器中,我有一个服务器 A,我将服务器 B 链接到 A,因此我可以从服务器 A 执行如下查询:

exec B.DataBase1.dbo.simplePs.

我的问题是如何获取正在执行 PS 的服务器?我试过 @@ServerName 这样的:

Create procedure simplePs
as
    insert into TRACE(EventInfo) values (@@SERVERNAME)

但我得到的是服务器 B 而不是服务器 A。

请帮忙。

你没有这样的上下文信息,对于服务器B,
查询是自己执行的 instance/database.

您可以做的最好的事情是将源服务器作为参数传递给过程中,并将 @@SERVERNAME 作为默认值。

Create procedure simplePs
@sourceServer as nvarchar(255) = @@SERVERNAME
as
insert into TRACE(EventInfo) values (@sourceServer)

您可以尝试查询 sys.sysprocesses table - 那里有很多有用的连接信息,例如

insert into TRACE(EventInfo) 
values (select distinct hostname from sys.sysprocesses where spid = @@SPID)

将插入连接的源主机名。