「sp_msforeachdb」ループ内で実行されている「sp_MSforeachtable」ループ内でテーブルを参照する方法はありますか?
たとえば、次のクエリでは、「?」常にデータベースを参照しています:
DECLARE @cmd VARCHAR(8000);
SET @cmd = 'USE ?; EXEC sp_MSforeachtable @command1="select db_name = DB_NAME(), db_foreach = ''?'', tb_foreach = ''?'' "'
EXEC sp_msforeachdb @command1 =@cmd
その結果:
db_name db_forearch tb_foreach
ServerMonitor master master
私は次のようなものが欲しい:
db_name db_forearch tb_foreach
ServerMonitor master <TABLE_NAME>
何を変更すればよいですか?
解決しました。Sean が提案したように、ow カーソルを使用しました。しかし、Ben Thul によって提案された @replacechar ソリューションは、まさに私が探していたものです。
DECLARE @cmd VARCHAR(8000);
SET @cmd = 'USE ^; EXEC sp_MSforeachtable @command1="select db_name = DB_NAME(), db_foreach = ''^'', tb_foreach = ''?'' "'
EXEC sp_msforeachdb @command1 =@cmd, @replacechar = '^'