2011-06-02 22 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

相關問題