Это настолько сложно (по крайней мере, в моей голове), что я не мог правильно назвать свой вопрос.
У меня есть сотни баз данных (по одной на каждую Supplier
), к которым мне нужно подключиться из центральной базы данных, содержащей таблицы Order
, Customer
и Supplier
.
В основном таблица Suppplier
в центральной базе данных выглядит так:
SupplierID | SupplierName | SupplierDatabaseName
1 Nestle Nestle005
2 Mars Mars001
Он содержит подробную информацию о поставщике и, самое главное, о том, как называется его имя базы данных.
Когда клиент размещает заказ, он попадает в таблицу заказов центральной базы данных следующим образом:
OrderID | CustomerID | SuppplierID | ProductID | Qty
1 1 2 100 5
В базе данных поставщика, такой как Mars001, есть таблица, в которой эта компания может управлять информацией о своих продуктах, например:
ProductID | ProductName
100 Skittles
Что мне нужно сделать, так это вернуть список заказов клиента вместе с ProductName
. Это означает, что я должен:
- Выберите все из таблицы
Order
центральной базы данных - Каким-то образом динамически укажите имя базы данных поставщика, которое будет использоваться в инструкции JOIN, чтобы получить ProductName из таблицы продуктов в этой базе данных.
Окончательный вывод должен выглядеть так:
OrderID | CustomerID | SupplierID | ProductID | ProductName
1 1 2 100 Skittles
Я в некоторой степени понимаю динамический sql и могу динамически указывать имя базы данных, используя параметр. Но это работает только тогда, когда значение параметра остается неизменным в запросе. Это сложнее, чем это.
Может ли кто-нибудь предложить способ решения этой проблемы? Возможно, это невозможно сделать в одном запросе?