Voici un code que nous utilisons pour d'abord vérifier si un utilisateur est déjà mis en correspondance avec un rôle, et sinon, de faire la cartographie. Vous devriez être en mesure de prendre le TSQL en haut qui utilise database_prinicipals et database_role_members et l'utiliser pour extraire les relations que vous avez dans votre base de données.
SELECT @sql = ' IF EXISTS (SELECT * FROM ' + @DatabaseName + '.sys.database_principals a
JOIN ' + @DatabaseName + '.sys.database_role_members b ON a.principal_id = b.role_principal_id
JOIN ' + @DatabaseName + '.sys.database_principals c ON b.member_principal_id = c.principal_id
WHERE a.Type = ''R'' AND a.Name = ''' + @CurrentDbRole + '''
AND c.type IN (''U'', ''S'') AND c.name = ''' + @MappedUser + ''')'
+ ' BEGIN
PRINT '''';
PRINT N''The [' + @MappedUser + '] user is already a member of the ['
+ @CurrentDbRole + '] role in the [' + @DatabaseName + '] database. Skipping Role Member creation.'';
PRINT '''';
END
ELSE
BEGIN
PRINT '''';
PRINT N''Adding the [' + @MappedUser + '] database user as member of the [' + @CurrentDbRole
+ '] role in the [' + @DatabaseName + '] database... '';
PRINT '''';
USE ' + @DatabaseName +';
EXECUTE sp_addrolemember [' + @CurrentDbRole + '], [' + @MappedUser + '];
PRINT '''';
PRINT ''Completed adding the user to the role.'';
PRINT '''';
END; ';