Simulating undocumented Procedures
Sometimes you may want to run a query against each database
Suppose you want to find all dabase names where particular table exists. You can use undocumented procedure
EXEC
sp_msforeachdb 'SELECT table_catalog FROM ?.INFORMATION_SCHEMA.TABLES where table_name=''your_table'''Because they are undocmented, you cant always rely on them.
Alternatively you can use the following methods
1 WHILE LOOP
declare @dbname varchar(100), @database_id int,@table_name varchar(100)
select @dbname='', @database_id=1,@table_name='your_table'
while
exists(Select * from sys.databases where database_id>@database_id)
Begin
select @dbname=name,@database_id=database_id from sys.databases where database_id=@database_id
EXEC('SELECT * FROM '+@dbname+'.INFORMATION_SCHEMA.TABLES where table_name='''+@table_name+'''')
select @database_id=min(database_id) from sys.databases where database_id>@database_id
End2 Concatenated SQL
declare
@sql varchar(max), @table_name varchar(100)
select @sql='', @table_name='your_table'
select @sql=@sql+ 'SELECT table_catalog FROM '+name+'.INFORMATION_SCHEMA.TABLES where table_name='''+@table_name+'''' from sys.databases
exec(@sql)