Bạn không thể có một truy vấn liệt kê tất cả cơ sở dữ liệu vì danh sách này là động. Đặt cược tốt nhất của bạn là sử dụng sp_msforeachdb
và có một lô tạo kết quả và trả về:
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;
Bạn có thể mở rộng điều này để bao gồm tư cách thành viên vai trò máy chủ và vai trò cơ sở dữ liệu khi bạn tìm ra hình dạng tập hợp kết quả thích hợp để tổng hợp tất cả thông tin đó trong một bảng.