Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
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] Ответить | Цитировать Сообщить модератору |
Pavel1211 Member Откуда: Екатеринбург Сообщений: 205 |
RRNDEONISIUSEZH, как минимум можно запрос с курсором по всем БД написать |
4 авг 16, 08:14 [19496221] Ответить | Цитировать Сообщить модератору |
Mr. X
Guest |
RRNDEONISIUSEZH, ничего не возможного нет: один запрос (курсор) перебирает все базы, другой в контексте выбранной базы вытаскивает все ее объекты. Все это заворачивается в динамику. |
4 авг 16, 08:35 [19496252] Ответить | Цитировать Сообщить модератору |
RRNDEONISIUSEZH Member Откуда: Сообщений: 27 |
Pavel1211, извиняюсь не до конца уточнил вопрос, можно конечно и курсор, в этом проблемы нет, но хочется реализовать через функцию, чтоб не нужно было дополнительных подпрыгиваний. Если все упростить, то задача заключается в выводе текста создания объектов всех БД для пользователя. что то типа: select * from DB.dbo.fnc_getTextObjectForAllDb() Соответственно, задачка проста, а вот реализовать чрез простой select не могу, есть уже практика и готовые процедуры, которые используют курсоры для перебора БД, хочется сделать более удобно. |
4 авг 16, 08:37 [19496256] Ответить | Цитировать Сообщить модератору |
RRNDEONISIUSEZH Member Откуда: Сообщений: 27 |
Mr. X, согласен, не сложно, но неужели нет способа через select? |
4 авг 16, 08:38 [19496260] Ответить | Цитировать Сообщить модератору |
SQL2008 Member Откуда: Москва Сообщений: 4392 |
Сделайте динамический запрос, в котором сделаете список всех баз, а потом запросы к 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] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
RRNDEONISIUSEZH Member Откуда: Сообщений: 27 |
iiyama, спасибо. но вся проблема в том, что хочу сделать select, как в обычной функции |
4 авг 16, 11:45 [19497565] Ответить | Цитировать Сообщить модератору |
RRNDEONISIUSEZH Member Откуда: Сообщений: 27 |
SQL2008, спасибо, натолкнули на верную мысль, так и сделал, создал вьюшку с перечислением необходимых баз и использую ее в функции |
4 авг 16, 11:47 [19497580] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |