Есть ли способ ссылаться на таблицу внутри цикла 'sp_MSforeachtable', запущенного внутри цикла 'sp_msforeachdb'?Как использовать как 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>
Что я должен изменить?
Решено. Я использовал мой указатель, как предложил Шон. Но решение @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 = '^'
Вы просто пытаетесь получить каждое имя таблицы из каждой базы данных? –
Nope. Моя задача немного сложнее (я хочу запустить скрипт на основе sp_spaceused для каждой таблицы в базе данных). Примером является просто упрощение понимания. – Michael
Почему бы просто не свернуть собственный курсор, а не для каждой базы данных? В любом случае есть некоторые проблемы с этой процедурой. Он не всегда находит каждую базу данных. http://sqlblog.com/blogs/aaron_bertrand/archive/2010/12/29/a-more-reliable-and-more-flexible-sp-msforeachdb.aspx –