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

Mar*_*son 7 sql t-sql sql-server sql-server-2005 sql-server-2008

我试图通过SQL Server 2005/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  
Run Code Online (Sandbox Code Playgroud)

不幸的是,当Windows帐户MyDomain\MyUser已经在数据库中但名称不同时,这不起作用.一个例子是,如果MyDomain\MyUser是创建数据库的帐户,那么它将已经在dbo用户下的数据库中.在这种情况下,我收到以下错误:

消息15063,级别16,状态1,行1登录已具有不同用户名下的帐户.

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

Dam*_*ver 14

使用SID而不是名称/ user_id对windows user vs sys.database_principals进行测试:

select * from sys.database_principals where sid = SUSER_SID(N'MyDomain\MyUser')
Run Code Online (Sandbox Code Playgroud)

由于这使用登录ID的SID,因此它在数据库中映射到的名称无关紧要.

  • 我需要从`sys.syslogins`中选择,为`SUSER_SID`选择+1 (2认同)