This is from an idea from here.
IF OBJECT_ID('tempdb.dbo.#t1') IS NOT NULL DROP TABLE #t1 SELECT CAST('?' AS VARCHAR(128)) AS [Database Name], [su1].[name] AS [Database User Name], [su2].[name] AS [Database Role] INTO [#t1] FROM [sys].[database_role_members] [r] INNER JOIN .[sysusers] [su1] ON [su1].[uid] = [r].[member_principal_id] INNER JOIN .[sysusers] [su2] ON [su2].[uid] = [r].[role_principal_id] WHERE [su2].[name] IN ('db_owner') AND [su1].[name] NOT IN ('dbo') AND 1 = 2 INSERT [#t1] ([Database Name], [Database User Name], [Database Role] ) EXEC sp_MSForEachDB 'SELECT ''?'' AS [Database Name], su1.name AS [Database User Name], su2.name AS [Database Role] FROM [?].sys.database_role_members r INNER JOIN [?]..sysusers su1 ON su1.[uid] = r.member_principal_id INNER JOIN [?]..sysusers su2 ON su2.[uid] = r.role_principal_id WHERE su2.name IN(''db_owner'') AND su1.name NOT IN(''dbo'')' DELETE FROM [#t1] WHERE [Database Name] IS NULL SELECT [Database Name], [Database User Name], [Database Role] FROM [#t1] GO