SQL Server:如何检查数据库中是否存在windows用户,但用户名不同

SQL Server:如何检查数据库中是否存在windows用户,但用户名不同,sql,sql-server,sql-server-2005,tsql,sql-server-2008,Sql,Sql Server,Sql Server 2005,Tsql,Sql Server 2008,我正在尝试通过SQLServer2005/2008中的T-SQL脚本创建一个用户。我运行以下SQL检查用户是否存在,如果不存在,则创建用户: IF NOT EXISTS (SELECT * FROM sys.database_principals WHERE name = N'MyDomain\MyUser') BEGIN CREATE USER [MyDomain\MyUser] FOR LOGIN [M

我正在尝试通过SQLServer2005/2008中的T-SQL脚本创建一个用户。我运行以下SQL检查用户是否存在,如果不存在,则创建用户:

IF NOT EXISTS (SELECT * 
               FROM   sys.database_principals 
               WHERE  name = N'MyDomain\MyUser') 
  BEGIN 
      CREATE USER [MyDomain\MyUser] FOR LOGIN [MyDomain\MyUser] WITH default_schema=[dbo]; 

      SELECT 1; 
  END 
ELSE 
  BEGIN 
      SELECT 0; 
  END  
不幸的是,如果windows帐户MyDomain\MyUser已在数据库中,但名称不同,则此操作不起作用。例如,如果MyDomain\MyUser是创建数据库的帐户,那么它将已经在数据库中的dbo用户下。在这种情况下,我会得到以下错误:

Msg 15063,16级,状态1,第1行 登录名已在下有一个帐户 不同的用户名


如何检查windows用户MyDomain\MyUser是否已经是数据库中的用户,即使它使用的是不同的用户名?

使用SID而不是名称/用户id对windows用户与sys.database\u主体进行测试:

select * from sys.database_principals where sid = SUSER_SID(N'MyDomain\MyUser')

因为它使用登录ID的SID,所以在数据库中映射到哪个名称并不重要。

。谢谢Damien。我需要从
sys.syslogins
中选择+1作为
SUSER\u SID