选择可能驻留在许多数据库中的数据
Selecting data that could reside in many databases
这太复杂了(至少在我的脑海里),我无法正确地命名我的问题。
我需要从包含 Order
、Customer
和 Supplier
的中央数据库连接到数百个数据库(每个 Supplier
一个) tables.
基本上中央数据库中的Suppplier
table是这样的:
SupplierID | SupplierName | SupplierDatabaseName
1 Nestle Nestle005
2 Mars Mars001
它包含有关供应商的详细信息,最重要的是他们的数据库名称。
当客户下订单时,它会进入中央数据库订单 table,如下所示:
OrderID | CustomerID | SuppplierID | ProductID | Qty
1 1 2 100 5
在 Mars001 等供应商的数据库中,有一个 table 供该公司管理有关其产品的信息,例如:
ProductID | ProductName
100 Skittles
我需要做的是 return 客户的订单清单,以及 ProductName
。这意味着我必须:
- Select 中央数据库的所有内容
Order
table
- 以某种方式动态提供要在 JOIN 语句中使用的供应商数据库名称,以从该数据库中的产品 table 中获取 ProductName
最终输出应如下所示:
OrderID | CustomerID | SupplierID | ProductID | ProductName
1 1 2 100 Skittles
我在一定程度上了解动态 sql ,我可以使用参数动态提供数据库名称。但这仅在参数值在查询中保持不变时才有效。这比那更复杂。
任何人都可以提出解决这个问题的方法吗?也许它不可能在单个查询中完成?
虽然这种类型的分区可能不是最好的,但您可能会坚持使用它。做你想做的事情的基本动态 SQL 并不难:
declare @sql nvarchar(max)
select @sql = N'
select o.orderid, o.customerid, s.supplierid, p.productid, p.productname
from [order] o
join Supplier s on o.SuppplierID = s.SupplierID
join ' + s.Supplierdatabasename + N'..product p on o.ProductID = p.productid'
from [order] o join Supplier s on o.SuppplierID = s.SupplierID
exec(@sql)
这会给你这样的结果:
orderid customerid supplierid productid productname
----------- ----------- ----------- ----------- --------------------
1 1 2 100 Skittles
当然可以改进查询,但它应该让您了解如何继续。
这太复杂了(至少在我的脑海里),我无法正确地命名我的问题。
我需要从包含 Order
、Customer
和 Supplier
的中央数据库连接到数百个数据库(每个 Supplier
一个) tables.
基本上中央数据库中的Suppplier
table是这样的:
SupplierID | SupplierName | SupplierDatabaseName
1 Nestle Nestle005
2 Mars Mars001
它包含有关供应商的详细信息,最重要的是他们的数据库名称。
当客户下订单时,它会进入中央数据库订单 table,如下所示:
OrderID | CustomerID | SuppplierID | ProductID | Qty
1 1 2 100 5
在 Mars001 等供应商的数据库中,有一个 table 供该公司管理有关其产品的信息,例如:
ProductID | ProductName
100 Skittles
我需要做的是 return 客户的订单清单,以及 ProductName
。这意味着我必须:
- Select 中央数据库的所有内容
Order
table - 以某种方式动态提供要在 JOIN 语句中使用的供应商数据库名称,以从该数据库中的产品 table 中获取 ProductName
最终输出应如下所示:
OrderID | CustomerID | SupplierID | ProductID | ProductName
1 1 2 100 Skittles
我在一定程度上了解动态 sql ,我可以使用参数动态提供数据库名称。但这仅在参数值在查询中保持不变时才有效。这比那更复杂。
任何人都可以提出解决这个问题的方法吗?也许它不可能在单个查询中完成?
虽然这种类型的分区可能不是最好的,但您可能会坚持使用它。做你想做的事情的基本动态 SQL 并不难:
declare @sql nvarchar(max)
select @sql = N'
select o.orderid, o.customerid, s.supplierid, p.productid, p.productname
from [order] o
join Supplier s on o.SuppplierID = s.SupplierID
join ' + s.Supplierdatabasename + N'..product p on o.ProductID = p.productid'
from [order] o join Supplier s on o.SuppplierID = s.SupplierID
exec(@sql)
这会给你这样的结果:
orderid customerid supplierid productid productname
----------- ----------- ----------- ----------- --------------------
1 1 2 100 Skittles
当然可以改进查询,但它应该让您了解如何继续。