这是如此复杂(至少在我脑海中),我无法正确地标题。
我需要从包含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
表最终输出应如下所示:
OrderID | CustomerID | SupplierID | ProductID | ProductName
1 1 2 100 Skittles
我在某种程度上理解动态sql,我可以使用参数动态提供数据库名称。但这仅在参数值在查询中保持不变时才有效。这比这更复杂。
有人可以请一个解决这个问题的方法吗?也许在单个查询中不可能做到这一点?
答案 0 :(得分:3)
虽然这种类型的分区可能不是最好的,但也许你会坚持下去。实现你想要的基本动态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
查询肯定可以改进,但它应该让您了解如何继续。