来自本地表

时间:2017-09-18 19:07:17

标签: sql-server ssis

我将来自两个单独数据服务器的数据暂存到登台服务器上 - 一个服务器包含订单信息,第二个服务器包含该订单的送货信息。我正在查看过去5天内修改的所有订单。然后,我想要为这些修改后的订单加载所有相关的送货信息。因此,在这种情况下有3台服务器 - 订单服务器,送货服务器和登台服务器。

我尝试根据分阶段订单列表为每个容器做一个 - 但是在1000的结果集中,这是一个非常慢的解决方案。

我无法对订单或送货服务器进行更改 - 但我可以在登台服务器上执行任何操作。

我真正想要做的是创建一个带有订单号列表的Variable对象,然后在我的Shipping server select语句中有一个像这样的过滤器:

从[shipping_table]中选择[送货字段],其中[variable_list_of_order_nbrs]中的order_nbr

2 个答案:

答案 0 :(得分:1)

如果您的送货信息编制良好,那么可以非常快速的一件事就是选择了“无缓存”的查找转换。

如果你需要回退多行,那可能会比较棘手,但是可以通过异步脚本转换来创建占位符行号,然后使用修改后的Lookup SQL语句(带有ROW_NUMBER()字段)来实现确保您只撤回所有必需的行和每行。

答案 1 :(得分:0)

我不确定这个解决方案的效率如何,但我的SQL技能刚刚出现在我脑海中: 注意:这需要更改订单服务和送货服务器提取逻辑

从源(订单服务)获取所有记录数据作为XML数据

DECLARE  @Product Table (
ID INT)

INSERT into @Product
select top 10 ROW_NUMBER() over(order by a.name)  as Rcount
from sys.all_objects a --used here for demo to generate series of numbers

--Return as XML
SELECT T.ID  
FROM @Product T
FOR XML path('')

然后将此xml数据作为输入参数传递给Shipping服务器。从XML参数中获取连接输出的记录。

DECLARE @XMlVal XML 

set @XMLVal = (SELECT T.ID  
FROM @Product T
FOR XML path('')
)

--Read from XML
SELECT 
prod.value('(.)[1]', 'int') AS 'ID'
FROM
@XMLVal.nodes('/ID') AS temp(prod)