Как правильно построить запрос
От: Zzz Россия  
Дата: 14.02.05 08:15
Оценка:
У меня есь запрос, при помощи которого я получаю список БД:

SELECT dbid AS Db_ID, name AS Db_Name FROM master.dbo.sysdatabases

Мне нужно ограничить этот список, включив только те БД, в которых присутствует некая таблица, пусть x_TblName.

Каков должен быть синтаксис, чтобы я мог использовать Db_Name в запросе в качестве имени БД, в которой я буду проверять наличие нужной таблицы?
Zzz
Re: Как правильно построить запрос
От: Smirnov.Anton Россия  
Дата: 14.02.05 08:20
Оценка:
Здравствуйте, Zzz, Вы писали:

Zzz>У меня есь запрос, при помощи которого я получаю список БД:

Zzz>SELECT dbid AS Db_ID, name AS Db_Name FROM master.dbo.sysdatabases
Zzz>Мне нужно ограничить этот список, включив только те БД, в которых присутствует некая таблица, пусть x_TblName.
Zzz>Каков должен быть синтаксис, чтобы я мог использовать Db_Name в запросе в качестве имени БД, в которой я буду проверять наличие нужной таблицы?
Ничего не выйдет, тк информация о таблицах БД хранится в таблице dbname..sysobjects
IMXO, проделать такое удастся только в курсоре по всем БД с использованием динамического SQL и занесением результята во временную таблицу
Re[2]: Как правильно построить запрос
От: Smirnov.Anton Россия  
Дата: 14.02.05 08:53
Оценка:
вот примерно так
declare @dbname sysname,@dbid int,@sql varchar(200),@findtablename sysname
set @findtablename='x_TblName'
if OBJECT_ID('tempdb..#dbs') is not null
 drop table #dbs
select name into #dbs from master..sysdatabases where 1=0
declare dbcur cursor for select name,dbid from master..sysdatabases where name not in ('master','tempdb','model','msdb')
open dbcur
fetch from dbcur into @dbname,@dbid
while @@fetch_status=0
begin
 set @sql='if exists(select name from '+@dbname+'..sysobjects where name='''+@findtablename+''' and type=''U'') '+
           'insert into #dbs select '''+@dbname+''''
 exec(@sql)
 fetch from dbcur into @dbname,@dbid
end
close dbcur
deallocate dbcur
select * from #dbs
Re[3]: Как правильно построить запрос
От: Zzz Россия  
Дата: 14.02.05 09:06
Оценка:
Большое Вам спасибо, Антон, попробую применить это в своей задаче
Zzz
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.