2011-06-02 19 views
7

我想通过SQL Server 2005/2008中的T-SQL脚本创建用户。我运行下面的SQL来检查用户是否存在和创建用户,如果它不:SQL Server:如何检查数据库中是否存在一个Windows用户,但使用不同的用户名

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, Level 16, State 1, Line 1 The login already has an account under a different user name.

如何检查如果Windows用户MYDOMAIN \ MYUSER已经在数据库中的用户,即使它是根据不同的用户名?

回答

14

做Windows用户测试VS使用SID而不是名称/ USER_ID sys.database_principals:

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

由于这个使用的登录ID的SID,也不要紧,那是什么名字映射到数据库中。

+0

梦幻般的答案。谢谢达米安。 – 2011-06-02 09:35:35

+2

我需要从'sys.syslogins'中选择,而'SUSER_SID' – 2012-02-20 13:46:32

相关问题