Благодаря Tiran за его предложенное решение. Для тех людей, которые пытаются ссылаться на несколько таблиц через SQL-сервер, как это делал Тиран, у меня есть дополнительный вход.
Я пытаюсь вытащить данные из нескольких источников (Прогресс), одну и ту же структуру таблицы в одно и то же время и вставить их в наш хранилище данных (SQL Server). Поэтому я просто пытаюсь объединить несколько одинаковых структурированных таблиц в разных базах данных. Решение Tiran начало меня по тому же пути, но привязка баз данных Progress была громоздким процессом, который потребовал от меня найти DBA Progress с 2-3 днями свободного времени (его цитата), чтобы собрать это вместе. Когда я говорил с людьми в Прогрессе напрямую, они также указывали, что если я создаю представление с объединением на стороне Прогресса, он будет последовательно извлекать данные из каждого источника в представлении, а не одновременно. Однако это привело меня к еще одному открытию, которое похоже на то, что оно решит наши потребности и полностью пропустит работу со связыванием таблиц со стороной «Прогресс».
Вот пример с тремя источниками, одинаковыми таблицами (это должно работать для перекрестного источника, соединенного с разными таблицами). Все имена здесь приведены только для ясности в примерах.
Source 1 - Table_A
Source 2 - Table_A
Source 3 - Table_A
- Создать подключение ODBC к источнику 1 имени Source1.
- Создайте соединение ODBC с источником 2 с именем source2.
- Создайте соединение ODBC с источником 3 с именем source3. (Обратите внимание, что вы, как правило, хотите установить настройку соединения на «Чтение незавершенных»).
В SQL Server создайте связанные серверные соединения с каждым источником.
ls_source1
ls_source2
ls_source3
В базе данных SQL Server, что вам нужно ссылаться на базах данных Прогресса в, создать представление, соединяющее три различных соединения, связанный сервера вместе, используя соединение. Ссылки на связанные серверы будут нуждаться в использовании openquery. В этом примере с использованием select * из каждого связанного источника сервера предполагается, что все столбцы названы и структурированы одинаково для каждого источника.
CREATE VIEW table_name_v as
SELECT *
FROM
(SELECT *
FROM OPENQUERY(ls_source1,
'select *
from source1.dbo.Table_A
')
union
SELECT *
FROM OPENQUERY(ls_source2,
'select *
from source2.dbo.Table_A
'
union
SELECT *
FROM OPENQUERY(ls_source3,
'select *
from source3.dbo.Table_A
'
)
) x
С созданным представлением вы можете одновременно запросить все три таблицы в разных источниках Progress. Никакой дополнительной настройки на стороне Прогресса не требуется.
Существует важное предостережение, над которым я сейчас работаю. Если вы работаете на 64-битной машине с использованием 64-битного SQL Server, вам необходимо использовать 64-битный драйвер для подключения к базе данных Progress с параметром связанного сервера. Мои потребности требуют, чтобы у меня как 32-битные, так и 64-битные драйверы на одном компьютере, и у меня возникли проблемы с этим, поскольку, по-видимому, они не играют хорошо вместе, когда находятся на одной машине. Я смог установить как 64-битные, так и 32-битные драйверы на одном компьютере (был сайт с ошибкой в Progress), который должен был отправить мне ссылку для этого драйвера, но я смог заставить кого-то туда направить меня в нужное место для получения 64-битного драйвера odbc. Средний человек не должен нуждаться в обоих драйверах и может просто использовать 64-разрядный. В качестве альтернативной работы, если я не смогу заставить обоих драйверов сосуществовать на одной машине, я нашел и подтвердил, что компания Connx предоставляет драйвер, обеспечивающий 64-битный/32-битный мост, который разрешает эту проблему для меня. В идеале, не требуется никакого программного обеспечения сторонних разработчиков.
Теперь, к сожалению, появилась новая проблема. связанные с сервером, которые я установил и использовали, более не работают должным образом. Два шага вперед, один шаг назад.
Просто подумал, что я поделюсь своими выводами, поскольку я уверен, что есть другие люди.
OpenEdge, hunh? У меня веселое решение, но это только для JDBC (на OpenEdge 10+) и Ruby. Наверное, делает его неосуществимым для вашего сценария, но дайте мне знать, если нет. –