SQL Server: Comment vérifier si un user Windows existe dans la database mais sous un autre nom d'user

J'essaie de créer un user via un script T-SQL dans SQL Server 2005/2008. Je cours le SQL suivant pour vérifier si l'user existe et crée l'user si ce n'est pas:

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 

Malheureusement, cela ne fonctionne pas lorsque le count Windows MyDomain \ MyUser est déjà dans la database, mais sous un nom différent. Un exemple de ceci serait si MyDomain \ MyUser était le count qui a créé la database alors il sera déjà dans la database sous l'user dbo. Lorsque c'est le cas, j'obtiens l'erreur suivante:

Msg 15063, niveau 16, état 1, ligne 1 Le login a déjà un count sous un nom d'user différent.

Comment puis-je vérifier si l'user Windows MyDomain \ MyUser est déjà un user dans la database même s'il est sous un nom d'user différent?

Faites le test pour l'user Windows vs sys.database_principals en utilisant le SID plutôt que le nom / user_id:

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

Comme cela utilise le SID de l'ID de connection, peu importe le nom auquel il a été mappé dans la database.