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 End
2 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)
Tags: t-sql, sql_server, undocumented, undocumented_procedures,