Vous ne pouvez pas avoir une seule requête répertoriant toutes les bases de données car la liste est dynamique. Votre meilleur pari est d'utiliser sp_msforeachdb
et demandez à un batch de construire le résultat et de le renvoyer :
set nocount on;
create table #result (sid varbinary(85),
server_principal_id int,
database_id int,
database_principal_id int);
exec ms_foreachdb 'insert into #result
(server_principal_id, database_id, database_principal_id)
select s.principal_id,
db_id(''?''),
d.principal_id
from sys.server_principals s
join [?].sys.database_principals d
on s.sid = d.sid;';
select * from #result;
Vous pouvez étendre cela pour inclure les rôles de serveur et les appartenances aux rôles de base de données une fois que vous avez trouvé une forme d'ensemble de résultats appropriée pour agréger toutes ces informations dans une seule table.