29

MSDN のドキュメントには、SUSER_SNAME関数について次のように記載されています。

ユーザーのセキュリティ識別番号 (SID) からログイン識別名を返します。

さらに、SUSER_NAME関数については次のように述べています。

ユーザーのログイン識別名を返します。

それにもかかわらず、次の SQL ステートメントを実行すると、同じ結果が得られます。

SELECT SUSER_NAME();
SELECT SUSER_SNAME();

では、違いとは何ですか。どちらを使用すればよいでしょうか。どちらか一方を使用する必要がある状況はありますか?

ご意見をお聞かせください、

前もって感謝します :)

4

2 に答える 2

32

引数なしで関数を呼び出すと、どちらも同じ値を返します。しかし、彼らは異なる議論をします:

  • SUSER_SNAME()はvarbinary(85) SID、ログインを引数として取ります
  • SUSER_NAME()はinteger principal_idログインを取得します

これは次のように確認できます。

select  suser_name(principal_id)
,       suser_name(sid)
,       suser_sname(principal_id)
,       suser_sname(sid)
from    sys.server_principals 
where   name = suser_name()

最初と最後の列のみがnull以外の値を返します。

于 2012-05-13T08:51:15.553 に答える