SQL 2014サーバーが2台あり、そのうちの1台から別のサーバーにリンクサーバーを作成しました。実行しようとしているタスクの一部として、ローカルサーバーとリンクサーバーの両方でSQLユーザーIDをユーザー名に変換する必要があります。
ローカルサーバーで私はただ呼び出すことができます
SELECT SUSER_NAME(1)
文字列sa
を返します
リンクサーバーで関数SUSER_NAME
を実行して、そこから値を取得する簡単な方法はありますか?
私が見つけたと思う他の代替案は、sys.server_principals
に結合してそこから名前を取り出すことですが、SUSER_NAME
はよりクリーンなアプローチのようです。
4部構成の名前を使用してリモートサーバーでsp_executesql
を実行することにより、そのリンクサーバーでダイナミック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;
もちろん、それぞれのアプローチには賛否両論があるので、これがそのリモートテーブルにJOINするよりも「クリーン」かどうかについては議論の余地があります。