Simulating undocumented Procedures

Published 19 May 08 12:00 PM | Madhivanan 

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)

Filed under: ,

Comments

# Other SQL Server Blogs around the Web said on May 19, 2008 7:20 AM:

Sometimes you may want to run a query against each database Suppose you want to find all dabase names

# SQL Server Transact-SQL (SSQA.net) : Simulating undocumented Procedures said on May 19, 2008 9:28 AM:

PingBack from http://sqlserver-qa.net/blogs/t-sql/archive/2008/05/19/4273.aspx

Anonymous comments are disabled

Search

Go

This Blog

«May 2008»
SMTWTFS
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567

Syndication