T-SQL:SUSER_SNAME对SUSER_NAME?

Moh*_*dil 27 sql t-sql sql-server

MSDN文档说明了SUSER_SNAME函数:

从用户的安全标识号(SID)返回登录标识名称.

更重要的是,它说明了SUSER_NAME功能:

返回用户的登录标识名称.

但是,当我执行以下SQL语句时,我得到相同的结果:

SELECT SUSER_NAME();
SELECT SUSER_SNAME();
Run Code Online (Sandbox Code Playgroud)

那么,有什么区别,我应该使用哪一个?是否有一种情况我应该使用一种而不是另一种情况?

请指教,

提前致谢 :)

And*_*mar 31

如果在没有参数的情况下调用函数,它们将返回相同的值.但他们确实采取了不同的论点:

  • 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()
Run Code Online (Sandbox Code Playgroud)

只有第一列和最后一列将返回非空值.