Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Получить список объектов из всех БД  [new]
RRNDEONISIUSEZH
Member

Откуда:
Сообщений: 27
Доброго времени суток!
Столкнулся с проблемой, необходимо получить список объектов в каждой БД на сервере одним запросом.
Знаю что есть вот такие удобные представления:
select * from sysobjects
select TABLE_CATALOG, TABLE_NAME, VIEW_DEFINITION from DATABASE.INFORMATION_SCHEMA.VIEWS
select SPECIFIC_CATALOG, SPECIFIC_NAME, ROUTINE_DEFINITION from DATABASE.INFORMATION_SCHEMA.ROUTINES

Но, для первого запроса необходимо находиться в БД в которой хочешь получить список,
а в следующих двух, нужно указывать название самой БД.

Есть ли все таки способ получить сразу список объектов из всех БД с описанием?
4 авг 16, 07:47    [19496188]     Ответить | Цитировать Сообщить модератору
 Re: Получить список объектов из всех БД  [new]
Pavel1211
Member

Откуда: Екатеринбург
Сообщений: 205
RRNDEONISIUSEZH,

как минимум можно запрос с курсором по всем БД написать
4 авг 16, 08:14    [19496221]     Ответить | Цитировать Сообщить модератору
 Re: Получить список объектов из всех БД  [new]
Mr. X
Guest
RRNDEONISIUSEZH,

ничего не возможного нет: один запрос (курсор) перебирает все базы, другой в контексте выбранной базы вытаскивает все ее объекты. Все это заворачивается в динамику.
4 авг 16, 08:35    [19496252]     Ответить | Цитировать Сообщить модератору
 Re: Получить список объектов из всех БД  [new]
RRNDEONISIUSEZH
Member

Откуда:
Сообщений: 27
Pavel1211,

извиняюсь не до конца уточнил вопрос, можно конечно и курсор, в этом проблемы нет, но хочется реализовать через функцию,
чтоб не нужно было дополнительных подпрыгиваний.

Если все упростить, то задача заключается в выводе текста создания объектов всех БД для пользователя.

что то типа:
select * from DB.dbo.fnc_getTextObjectForAllDb()


Соответственно, задачка проста, а вот реализовать чрез простой select не могу, есть уже практика и готовые процедуры, которые используют курсоры для перебора БД, хочется сделать более удобно.
4 авг 16, 08:37    [19496256]     Ответить | Цитировать Сообщить модератору
 Re: Получить список объектов из всех БД  [new]
RRNDEONISIUSEZH
Member

Откуда:
Сообщений: 27
Mr. X,

согласен, не сложно, но неужели нет способа через select?
4 авг 16, 08:38    [19496260]     Ответить | Цитировать Сообщить модератору
 Re: Получить список объектов из всех БД  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4392
RRNDEONISIUSEZH
Mr. X,

согласен, не сложно, но неужели нет способа через select?

Сделайте динамический запрос, в котором сделаете список всех баз, а потом запросы к sysobjects типа
select * from base1.sysobjects
union all
select * from base2.sysobjects
union all
select * from base3.sysobjects

...

union all
select * from baseX.sysobjects
4 авг 16, 09:19    [19496355]     Ответить | Цитировать Сообщить модератору
 Re: Получить список объектов из всех БД  [new]
iiyama
Member

Откуда:
Сообщений: 642
RRNDEONISIUSEZH,

Риски Ваши, я просто пролетал мимо ;-)

create table #alldbobj(db sysname, name sysname, xtype sysname)

insert into #alldbobj
	exec sp_MSforeachdb 'select ''?'' AS DatabaseName, name, xtype from sysobjects'
select * from #alldbobj
4 авг 16, 10:32    [19496832]     Ответить | Цитировать Сообщить модератору
 Re: Получить список объектов из всех БД  [new]
RRNDEONISIUSEZH
Member

Откуда:
Сообщений: 27
iiyama, спасибо. но вся проблема в том, что хочу сделать select, как в обычной функции
4 авг 16, 11:45    [19497565]     Ответить | Цитировать Сообщить модератору
 Re: Получить список объектов из всех БД  [new]
RRNDEONISIUSEZH
Member

Откуда:
Сообщений: 27
SQL2008, спасибо, натолкнули на верную мысль, так и сделал, создал вьюшку с перечислением необходимых баз и использую ее в функции
4 авг 16, 11:47    [19497580]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить