有沒有什麼辦法可以在'sp_msforeachdb'循環內運行'sp_MSforeachtable'循環內引用表?如何在同一查詢中同時使用sp_msforeachtable和sp_msforeachdb?
例如,在下面的查詢中,'?'總是引用數據庫:
DECLARE @cmd VARCHAR(8000);
SET @cmd = 'USE ?; EXEC sp_MSforeachtable @command1="select db_name = DB_NAME(), db_forearch = ''?'', tb_foreach = ''?'' "'
EXEC sp_msforeachdb @command1 [email protected]
結果造成:
db_name db_forearch tb_foreach
ServerMonitor master master
我想有這樣的:
db_name db_forearch tb_foreach
ServerMonitor master <TABLE_NAME>
我應該怎麼改?
已解決。按照肖恩的建議,我使用了我的ow遊標。但Ben Thul提出的@replacechar解決方案正是我所期待的。
DECLARE @cmd VARCHAR(8000);
SET @cmd = 'USE ^; EXEC sp_MSforeachtable @command1="select db_name = DB_NAME(), db_forearch = ''^'', tb_foreach = ''?'' "'
EXEC sp_msforeachdb @command1 [email protected], @replacechar = '^'
你只是試圖從每個數據庫中獲取每個表名? – 2014-12-02 14:40:58
沒有。我的目標有點複雜(我想爲sp_spaceused爲數據庫中的每個表運行腳本)。這個例子只是爲了更容易理解。 – Michael 2014-12-02 15:47:16
爲什麼不直接推出自己的遊標而不是每個數據庫?無論如何,這個程序有一些問題。它並不總是找到每個數據庫。 http://sqlblog.com/blogs/aaron_bertrand/archive/2010/12/29/a-more-reliable-and-more-flexible-sp-msforeachdb.aspx – 2014-12-02 15:56:11