Try this code:
DECLARE @t TABLE
(
[Server Login] VARCHAR(200)
, [DB User] VARCHAR(200)
, default_database_name VARCHAR(200)
, dbName VARCHAR(200)
);
DECLARE
@rows INT
, @row INT = 1
, @dbName sysname
, @sql VARCHAR(MAX);
DECLARE @dbS TABLE (id INT IDENTITY PRIMARY KEY, dbname sysname);
INSERT INTO @dbS (dbname) SELECT name FROM sys.databases ORDER BY name;
SET @rows = @@ROWCOUNT;
WHILE @row <= @rows
BEGIN
SELECT @dbName = dbname FROM @dbS WHERE id = @row;
-- SET @sql = 'USE ' + QUOTENAME(@dbName);
BEGIN TRY
-- EXECUTE (@sql);
SET @sql = 'SELECT
sp.name AS [Server login]
, dp.name AS [DB user]
, sp.default_database_name
, ' + QUOTENAME(@dbName, '''') + '
FROM ' + QUOTENAME(@dbName) + '
.sys.server_principals sp
JOIN ' + QUOTENAME(@dbName) + '.sys.database_principals dp
ON sp.sid = dp.sid
ORDER BY
sp.name;'
INSERT @t
EXECUTE (@SQL);
END TRY
BEGIN CATCH
PRINT ERROR_MESSAGE();
END CATCH;
SET @row = @row + 1;
END;
SELECT * FROM @t;