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

Откуда:
Сообщений: 77
Здравствуйте!
Есть несколько одинаковых баз данных рахличающихся по годам наполнения (2010,2011,2012 )
запрос одинаков для всех баз. Как в одном запросе вывести информацию из всех баз данных чтобы использовать его в дальнейшем в отчете?
Вот запрс:
declare @i int
set @i=0
SELECT    0 as id,  p.oc as ocp,spec.spec ,fakultet.namefak, spec.idfak, Student.ids,Student.f,Student.idvo,Student.idg,  spec.dec,Student.idlang,lang.lang,Disc.disc,  Disc.kred, Gruppa.idgrupp, regzurn.idd, zurn.rk1,  zurn.rk2, tests2.oc, regzurn.stzurn,regzurn.sem,Gruppa.Gruppa, formObuch
into #temp
FROM         zurn 
LEFT OUTER JOIN    regzurn ON regzurn.idrz = zurn.idrz
left outer join student  on student.ids=zurn.ids
left outer join  gruppa  on gruppa.idgrupp=student.idgrupp
left outer join         lang ON lang.idlang = Student.idlang 
left outer join    spec on gruppa.idspec=spec.idspec
left outer join    fakultet on fakultet.idfak=spec.idfak
left outer join    VAROB on VAROB .idVO=student.idVO
LEFT OUTER JOIN    Disc ON regzurn.idd = Disc.idd 
left outer join perezachet as p on Student.ids=p.ids and regzurn.idd=p.idd
and p.stper=regzurn.stzurn and (regzurn.sem=p.sem) and p.oc is not null and (p.sem=:semp1 OR  p.sem=:semp2   ) 
left outer join    tests2 on student.ids=tests2.ids and regzurn.idd=tests2.idd and  ( regzurn.sem=tests2.sem) and  (tests2.sem=:semt1 OR  tests2.sem=:semt2  )
WHERE     (Student.ids =:s1)  and zurn.ids=:s  and  (regzurn.sem=:sem1 OR  regzurn.sem=:sem2   )
order by  regzurn.sem, Disc.disc
update #temp set @i=id=@i+1
select * from #temp
drop table #temp
Какие есть предлжения по решению задачи? Заранее благодарю!
4 янв 12, 07:36    [11857265]     Ответить | Цитировать Сообщить модератору
 Re: как сделать запрос из нескольких баз одновременно?  [new]
skorpk
Member

Откуда: Волгоград
Сообщений: 276
bleksenlen,
Если вам нужно выполнить этот запрос на всех БД и потом объеденить то просто делайте [имя БД].[схема].[таблица/представление] в вашем запросе объединяйте их как вам нужно
4 янв 12, 08:26    [11857276]     Ответить | Цитировать Сообщить модератору
 Re: как сделать запрос из нескольких баз одновременно?  [new]
bleksenlen
Member

Откуда:
Сообщений: 77
skorpk, проблемма в том что года идут и предется с каждым годам постоянно исправлять запрос те редактировать в них года Нужно чтобы запрос понимал и отсчитывал последние пять лет начиная с текущего года! Как можно передовать параметром год в запрос?
4 янв 12, 08:40    [11857280]     Ответить | Цитировать Сообщить модератору
 Re: как сделать запрос из нескольких баз одновременно?  [new]
Lok_II
Member

Откуда:
Сообщений: 20
Копай в сторону EXECUTE.
Например, делаешь цикл по годам, а в строке запроса меняешь год.
...
set @template_query = 'select * into #temp from [dbnameYYYY].[dbo].[tablename]'
....
--внутри цикла по годам
set @query = replace(@template_query, 'YYYY', cast(@year as varchar))
execute @query
4 янв 12, 09:30    [11857300]     Ответить | Цитировать Сообщить модератору
 Re: как сделать запрос из нескольких баз одновременно?  [new]
skorpk
Member

Откуда: Волгоград
Сообщений: 276
Тогда либо динамический запрос, либо собирать данные в одну или несколько таблиц.
4 янв 12, 10:03    [11857324]     Ответить | Цитировать Сообщить модератору
 Re: как сделать запрос из нескольких баз одновременно?  [new]
AndreyRnD
Member

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

Если вам нужно брать данные за последние пять лет, то можно сделать jobs, который раз в год сформирует view'ху и берите на здоровье из нее данные для отчета (в jobs прописать, чтобы он взял только нужные таблицы: взять год от текущей даты выполнения jobs и там немного поиграть со строками, а базы именовать так, чтобы отличался только год). Ну вот коряво, но как-то так.
4 янв 12, 18:56    [11858751]     Ответить | Цитировать Сообщить модератору
 Re: как сделать запрос из нескольких баз одновременно?  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
use master
declare @sp_execusql sysname
set @sp_execusql = 'msdb.sys.sp_executesql'
exec @sp_execusql N'select db_name()'
4 янв 12, 19:00    [11858767]     Ответить | Цитировать Сообщить модератору
 Re: как сделать запрос из нескольких баз одновременно?  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
CREATE VIEW (Transact-SQL) -> Секционированные представления

Создание секционированных представлений
Использование секционированных представлений
4 янв 12, 21:45    [11859448]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить