SSIS - 传输后更新源记录

时间:2010-12-02 22:25:33

标签: sql tsql ssis

我有2个SQL Server。 ServerA和ServerB

他们都有一个名为“OrderRequest”的表

ServerA是“内部”,ServerB位于我们的数据中心。

ServerA有一个链接服务器 - ServerB 在ServerB上有一个链接服务器返回ServerA

我需要删除后一个链接服务器,因为允许ServerB“看到”ServerA的防火墙正在改变,并且不再允许这样做。

我们有一个SSIS包,可以将数据从我们的数据中心(ServerB)复制到我们的内部服务器(ServerA)

目前,SQL语句符合以下几行:

SELECT *
FROM ServerB.OrderRequest
WHERE
OrderID NOT In (SELECT OrderID FROM ServerA.OrderRequest)

如您所见,这将要求ServerB能够“看到”ServerA

我想做的是:

SELECT *
FROM ServerB.OrderRequest
WHERE
Transferred = 0

这很容易做到。但是,在我的SSIS中我有一个联盟(因为我有一个以上的WebDB) 之后,它们将被插入ServerA。

成功插入时,我需要做的是设置Transferred to true。 我该怎么做呢?

1 个答案:

答案 0 :(得分:1)

显然有很多方法可以做到这一点,但这取决于几个因素(例如,您在进行传输时是否在ServerB中插入了更多记录?)

  • 对foreach容器进行多播 使用OLE DB命令。呼叫 更新ServerB上的每条记录。
  • 在选择之前启动交易。选择完成后,更新要传输的所有行(如果您想要更多原子性,请选择临时表以确保正确更新)。完成后:提交。失败:回滚。
  • 完成后只需运行SQL命令:UPDATE ServerB.OrderRequest SET Transferred = 1 WHERE Transferred = 0