Gre*_*reg 5 sql-server linked-server functions sql-server-2014
我们有两台 SQL 2014 服务器,我在其中一台上创建了一个链接服务器到另一台上。作为我尝试运行的任务的一部分,我需要将 SQL 用户 ID 转换为本地和链接服务器上的用户名。
在本地服务器上,我可以调用
SELECT SUSER_NAME(1)
Run Code Online (Sandbox Code Playgroud)
这将返回字符串 sa
是否有一种简单的方法可以SUSER_NAME在链接服务器上运行该函数以从那里获取值?
我认为我发现的另一种选择是加入sys.server_principals并从那里拉出名称,但SUSER_NAME似乎是一种更清洁的方法。
您可以通过sp_executesql使用 4 部分名称在该远程服务器上执行来在该链接服务器上执行动态 SQL 。然后你只需将它分配给一个标记为的变量OUTPUT:
DECLARE @RemoteName sysname,
@LoginID INT;
SET @LoginID = 267;
EXEC [LinkedServerName].master.dbo.sp_executesql
N'SET @tmpRemoteName = SUSER_NAME(@tmpLoginID);',
N'@tmpLoginID INT, @tmpRemoteName sysname OUTPUT',
@tmpLoginID = @LoginID,
@tmpRemoteName = @RemoteName OUTPUT;
SELECT @RemoteName;
Run Code Online (Sandbox Code Playgroud)
当然,这是否比 JOIN 到远程表“更干净”是有争议的,因为每种方法都有优点和缺点。