转换并复制 table 数据

Transform and copy table data

抱歉,如果这个问题之前有人问过,但我发布了它,因为无法在论坛中找到任何相关内容。所以任何帮助将不胜感激。 这是我的场景。

我们有一个 SQL table 视图 A(仅读取访问权限),其数据集位于域 A 的服务器 A 上。 我们的 SQL 数据库和 table B 位于域 B 的服务器 B 上。 我们已经在 2 个域之间打开了端口。

我们需要编写一个 SSIS 作业(每天运行),它将从视图 A 中获取数据并插入到 Table B 中。那么实现此目的的最佳方法是什么。

注:

方法一:

方法二:

我推荐第三种方法,在服务器 B 上的数据库 B 中应用新的暂存 table 和历史记录 table。暂存 table 将主要反映您的 Table B ,但不会包含任何约束,并且会有一个额外的位列定义状态。历史 table 将主要反映 Table B 结构,但将包含两个额外的列(ChangeDate 和 ChangeMade)。最后,对于这种方法,您需要将用于将视图中的记录定义为唯一的列标识出来。

  • 截断分期table(根据之前的结果)。
  • 将数据从视图(服务器 A)导出到暂存 table(服务器 B)。
  • 运行 SQL 检查每条记录的一致性和质量的任务。那些通过的记录,将 Status 位字段值设置为 1,否则设置为 0。
  • 在 SQL 任务中应用 MERGE 调用,将数据从源 (Staging table) 转换到目标 table (Table B) 和更新历史 table。这仅适用于 Status = 1 的那些记录。使用 MERGE,您还可以输出已更改内容的历史记录到新的历史记录 table,指示 "I" 用于插入,"U"根据 MERGE 中定义的匹配进行更新或 "D" 删除。
  • 对于 Staging table 中值为 0 的那些记录,向需要知道已找到 X 条问题记录的任何人发送电子邮件。

这里的想法是进程不会停止,如果发现单个错误记录,您不需要强制回滚。此外,您可以通过查看暂存 table 来监控日常流程。我过去采用过这种方法并将其集成到发送电子邮件警报中,其中包含指向报告问题记录的 SSRS 报告的链接。这样做让我能够主动在问题记录中找到模式,并与我的上游人员一起解决问题。如果您有超过一百万条记录被视图提取,那么您可能需要向 Staging table 添加一个代理键(设置为主要),其标识从 1 开始,并自动递增 1从视图中导入的每条新记录。在 运行 MERGE 之前,使用代理键设置聚簇索引。这将大大提高 MERGE 的性能。在第一步截断暂存 table 之前,删除索引。

希望对您有所帮助。

只需创建一个包含三个语句的 SQL 存储过程即可实现 - insert -- 用于从 A 到 B 插入新记录 -更新 -- 更新之前复制的记录中发生的更改,因为作业将每天 运行 -delete -- 如果在 A

中删除了任何记录,则删除 B 中所有已删除的记录

如果您需要有关此解决方案的任何说明,我将很高兴