【发布时间】:2011-01-06 11:43:39
【问题描述】:
我们正在使用 SSIS 将 3 个表的内容从 ServerA 传输到 ServerB
ServerA 位于内部,ServerB 位于数据中心。 从 ServerA 到 ServerB 存在 VPN 连接,反之亦然。 出于安全原因,我们希望移除 ServerB“查看”ServerA 的能力
当前的 SQL 选择语句是这样的:
SELECT * FROM ServerB.OrderTable WHERE NOT IN ServerA.OrderTable
(我很欣赏语法已关闭)
然后将这些记录插入到 ServerA.OrderTable(表相同)
这很有效——只传输不在 ServerA 中的记录
但是,这需要 ServerB 了解 ServerA 我建议做的是在每个表上放置一个“Transferred”位列,并循环遍历每条记录,将 Transferred 设置为 true。
这样,上面提到的 SQL 语句就可以改成这样:
SELECT * FROM ServerB.OrderTable WHERE Transferred = 0
我的问题是,如何去做这件事? 我被告知 foreach 循环容器可以做到这一点,但我在任何地方都找不到...... 有人能指出我正确的方向吗
【问题讨论】:
-
您可能过于复杂了。您不能让服务器 A 创建一个非常窄的表,该表仅包含名为
[ServerAPK]之类的主键,将其传输到服务器 B,然后在您的WHERE子句中使用该列表吗? -
为什么不直接使用 MERGE 命令呢?它旨在同步两个表。您无需担心设置位、循环或其他任何事情。 bit.ly/7UU0p
-
是的,应该使用上述不同的方法
-
因为一台服务器是SQL 2008,一台是2000——仅支持>2008
标签: sql-server sql-server-2008 ssis