подскажите, плиз, у меня часть информации находится в одной базе, а часть в другой, я хочу это выводить всё вместе. Как мне сделать чтоб был один запрос на 2 БД?
25.10.06 12:36: Перенесено модератором из 'Java' — Blazkowicz
Здравствуйте, Korablik, Вы писали:
K> подскажите, плиз, у меня часть информации находится в одной базе, а часть в другой, я хочу это выводить всё вместе. Как мне сделать чтоб был один запрос на 2 БД?
ЕСЛИ сама СУБД не поддерживает кросс-запросы, то никак. Oracle и Informix точно знаю поддерживают.
Здравствуйте, Korablik, Вы писали:
K> подскажите, плиз, у меня часть информации находится в одной базе, а часть в другой, я хочу это выводить всё вместе. Как мне сделать чтоб был один запрос на 2 БД?
Простое решение — проксировать либо оборачивать Connection/Statement/ResultSet с возможностью выполнения и возвращения запросов на/от N СУБД. Хотя мне это не кажется хорошим решением (как минимум не понятно что например делать c DatabaseMetaData). т.е. нужно хорошо обдумать варианты использования.
Здравствуйте, Korablik, Вы писали:
K> подскажите, плиз, у меня часть информации находится в одной базе, а часть в другой, я хочу это выводить всё вместе. Как мне сделать чтоб был один запрос на 2 БД?
ну вобщем тут уже всё правильно ответили.
всё будет от базы зависеть.
на оракле можно так:
— все данные находятся в двух разных схемах
— создаём третью схему, в которой прописываем синонимы на нужные объекты двух других схем (таблицы, вьюшки, процедуры)
— приложение работает с базой из-под третьей схемы и имеет доступ ко всем нужным ей данным
небольшой плюс от такого подхода: чёткое разделение прав доступа и возможность иметь несколько независимых схем в базе.
Твой учитель — это не тот, кто тебя учит, а тот, у кого учишься ты
(c) Записная книжка Дональда Шимоды
Здравствуйте, an-392, Вы писали:
A3>Здравствуйте, Korablik, Вы писали:
K>> подскажите, плиз, у меня часть информации находится в одной базе, а часть в другой, я хочу это выводить всё вместе. Как мне сделать чтоб был один запрос на 2 БД? A3>Простое решение — проксировать либо оборачивать Connection/Statement/ResultSet с возможностью выполнения и возвращения запросов на/от N СУБД. Хотя мне это не кажется хорошим решением (как минимум не понятно что например делать c DatabaseMetaData). т.е. нужно хорошо обдумать варианты использования.
ну так все-равно одним запросом не получится. Не думаю что возможно (за разумное время/деньги) написать прокси для ови драйвера, который бы разбирал запрос на составные запросы и выполнял их на разных субд, собирая несколько результатов затем в один.
Здравствуйте, an-392, Вы писали:
A3>Простое решение — проксировать либо оборачивать Connection/Statement/ResultSet с возможностью выполнения и возвращения запросов на/от N СУБД. Хотя мне это не кажется хорошим решением (как минимум не понятно что например делать c DatabaseMetaData). т.е. нужно хорошо обдумать варианты использования.
элементы имеют одинаковый Id может как-нибуть на этом сыграть? Может написать 2 запроса и в GridView соединить их по Id? Вот поддержит ли это GridView? надо у него спросить )))
Здравствуйте, Lucker, Вы писали:
L>ну так все-равно одним запросом не получится. Не думаю что возможно (за разумное время/деньги) написать прокси для ови драйвера, который бы разбирал запрос на составные запросы и выполнял их на разных субд, собирая несколько результатов затем в один.
А, не так понял условие. Я предполагал что запрос один, но выполнить его надо на 2-х серверах.
Здравствуйте, Korablik, Вы писали:
K>Здравствуйте, Lucker, Вы писали:
L>>ЕСЛИ сама СУБД не поддерживает кросс-запросы, то никак. Oracle и Informix точно знаю поддерживают.
K>SQL 2005
BOL->linked servers
Здравствуйте, Korablik, Вы писали:
K> подскажите, плиз, у меня часть информации находится в одной базе, а часть в другой, я хочу это выводить всё вместе. Как мне сделать чтоб был один запрос на 2 БД?
Оказывается всё гениальное — просто, в SQL SERVER 2005 эта проблемма решается вот так:
1. перед "dbo" к второй базе, просто ставим имя второй
2. Второго пункта НЕТ
Здравствуйте, pkarklin, Вы писали:
P>Здравствуйте, Korablik, Вы писали:
K>>Здравствуйте, Lucker, Вы писали:
L>>>ЕСЛИ сама СУБД не поддерживает кросс-запросы, то никак. Oracle и Informix точно знаю поддерживают.
K>>SQL 2005
BOL->>linked servers
Сорри, ступил. Показалось, что базы на разных серверах. А так используйте полные имена объектов database_name.owner.object.
Здравствуйте, Korablik, Вы писали:
K>Здравствуйте, pkarklin, Вы писали:
P>>Сорри, ступил. Показалось, что базы на разных серверах. А так используйте полные имена объектов database_name.owner.object.
K>Встречный вопрос: как это под одним СЕЛЕКТОМ записать ))))
Если "это" — запрос к бд на разных серверах, то надо сначала прилинковать один к другому, а потом использовать в запросе:
SELECT
*
FROM
linked_server.database.dbo.table T1
INNER JOIN ...
Здравствуйте, pkarklin, Вы писали:
P>Если "это" — запрос к бд на разных серверах, то надо сначала прилинковать один к другому, а потом использовать в запросе:
P>