'sp_msforeachtdb'루프 내에서 실행되는 'sp_MSforeachtable'루프 내에서 테이블을 참조 할 수있는 방법이 있습니까?sp_msforeachtable과 sp_msforeachdb를 같은 쿼리에서 사용하는 방법은 무엇입니까?
예를 들어, 다음 쿼리에서 '?'
db_name db_forearch tb_foreach
ServerMonitor master <TABLE_NAME>
내가 무엇을 변경해야합니다 :
db_name db_forearch tb_foreach
ServerMonitor master master
내가 좋아하는 무언가를 갖고 싶어 :
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]
이 결과 : 항상 데이터베이스를 참조하는?
해결. 나는 Sean이 제안한 것처럼 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 = '^'
각 데이터베이스에서 모든 테이블 이름을 가져 오려고합니까? –
Nope. 내 목표는 좀 더 복잡합니다 (데이터베이스의 모든 테이블에 대해 sp_spaceused를 기반으로 스크립트를 실행하고 싶습니다). 이 예는 이해하기 쉽도록하기위한 것입니다. – Michael
왜 각 데이터베이스 대신 자신의 커서를 굴리는 것이 좋을까요? 어쨌든 그 절차에는 몇 가지 문제가 있습니다. 항상 모든 데이터베이스를 찾지는 않습니다. http://sqlblog.com/blogs/aaron_bertrand/archive/2010/12/29/a-more-reliable-and-more-flexible-sp-msforeachdb.aspx –