很抱歉,如果此问题被问过,但是我发布了,因为无法在论坛中找到任何相关信息。所以任何帮助将不胜感激。 这是我的情景。
我们有一个SQL表视图A(只是读取访问权限),其中包含位于域A上的服务器A上的数据集。 我们的SQL数据库与表B位于域B上的服务器B上。 我们在两个域之间打开了端口。
我们需要编写一个SSIS作业(每天运行),它将从View A获取数据并插入表B.那么可能是实现此目的的最佳方法。
注意:
方法1:
方法2:
答案 0 :(得分:0)
我建议在服务器B上的数据库B中应用新的登台表和历史表的第三种方法。登台表将主要镜像您的表B,但不包含任何约束,并且将有一个额外的位列定义状态。历史表将主要反映表B结构,但将包含两个附加列(ChangeDate和ChangeMade)。最后,对于这种方法,您需要确定用于将视图中的记录定义为唯一的列。
这里的想法是该过程不会停止,如果找到一条坏记录,则不需要强制回滚。此外,您还可以通过查看Staging表来监视每日进程。我过去采用了这种方法,并将其集成到其中,发送电子邮件警报,其中包含SSRS报告的链接报告问题记录。这样做可以让我主动找到问题记录中的模式,并与我上游的人一起解决问题。如果视图提取了超过一百万条记录,那么您可能希望将一个代理键(设置为主要密钥)添加到Staging表中,其标识从1开始,并在每个新记录导入时自动递增1从视角来看。在运行MERGE之前,使用代理键设置聚簇索引。这将大大提高MERGE的性能。在第一步截断Staging表之前,删除索引。
希望这有帮助。
答案 1 :(得分:0)
只需通过创建具有三个语句的SQL存储过程即可实现此目的 - insert - 用于从A到B插入新记录 -Update - 更新在作业将每天运行之前复制的记录中发生的更改 -delete - 如果在A
中删除了任何记录,则删除B中的任何已删除记录如果您需要对此解决方案有任何澄清,我会很高兴