获取正在链接服务器中执行查询的服务器名称
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)
将插入连接的源主机名。
在 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)
将插入连接的源主机名。