您可以使用存儲過程sp_msforeachdb
sp_msforeachdb:這是一個非常有用的 系統存儲過程,將 執行傳遞給了 在每個數據庫的SQL 服務器上的任何SQL腳本實例。存儲過程 只是循環遍歷數據庫, 這是很容易編寫,但它可以節省 你不必自己做。
的sp_msforeachdb
存儲過程中的數據庫名稱和添加列佔位符的數據庫名稱,然後執行該腳本這樣[?]:
EXECUTE sp_msforeachdb 'select ''[?]'' as DatabaseName,
u.name
,case when (r.principal_id is null) then ''public'' else r.name end
,l.default_database_name
,u.default_schema_name
,u.principal_id
from [?].sys.database_principals u
left join ([?].sys.database_role_members m join [?].sys.database_principals r on m.role_principal_id = r.principal_id)
on m.member_principal_id = u.principal_id
left join [?].sys.server_principals l on u.sid = l.sid
where u.type <> ''R'''
爲了得到這一切在一表你必須在一個數據庫中創建一個表,我們將以master
爲例。
在master
數據庫中創建表
Create Table master.dbo.userPermissionResults
(
....
)
然後,只需插入語句添加到查詢開始
EXECUTE sp_msforeachdb 'Insert Into master.dbo.userPermissionResults select ''[?]'' as DatabaseName,
u.name
,case when (r.principal_id is null) then ''public'' else r.name end
,l.default_database_name
,u.default_schema_name
,u.principal_id
from [?].sys.database_principals u
left join ([?].sys.database_role_members m join [?].sys.database_principals r on m.role_principal_id = r.principal_id)
on m.member_principal_id = u.principal_id
left join [?].sys.server_principals l on u.sid = l.sid
where u.type <> ''R'''
必須另行指定爲Insert
聲明數據庫名,將嘗試將數據插入到當前數據庫中。
整潔!有沒有一種簡單的方法可以將它放入表格中(或放入同一個網格中)? – atricapilla 2010-06-11 11:27:09
我已經更新了我的答案,詳細介紹瞭如何將數據插入到一個表中。 HTH Barry – codingbadger 2010-06-11 11:41:11
太棒了!謝謝!! – atricapilla 2010-06-11 12:13:31