Loï*_*pes 5 ms-access sql-server migration ssis
我必须做一个迁移,我应该从 40 个 Access 表中检索数据,这些表应该包含几个相同的列(但不是全部,模式不同)。为简化起见,我使用 SSMA 在 SQL Server 中转换这些表。
它是通过 SSIS 迁移的一部分。我必须将所有这些表合并到一张表中,而不会重复。所有表格的部分处理都是相同的,但有一些微妙之处。一个问题是列名略有不同(如 X_Y 而不是 X)。每个表都有特定的列,但我不想检索其中的数据。
我希望这不是一个太宽泛的问题,但是:
尝试做一个通用的部分,将表名作为变量,对其中的条件应用相同的处理来处理差异是否更好?
或者我应该只是复制和粘贴核心/模板数据流并在单独的包中管理每个差异?
鉴于:
然后我会复制并粘贴核心数据流,并根据需要对每个表进行更改。对于包含少量表(不是 200 个或更多)的非重复过程,您不想花太多时间创建一个永远不会重复的可重复过程 ;-)。无论如何,您都将不得不管理差异,因此您不妨将精力放在这部分上。
并且应该可以在 SSIS 中定义一个可重用的组件(脚本任务)来处理一些“常见”操作。如果没有,只需创建一个接受表名的存储过程并处理那里的常见步骤。然后,在 SSIS 中,只需为每个表调用该存储过程,这样您就可以为公共内容定义一个单一的定义,如果您需要对公共更改进行轻微更改,那么您只需要在一处:)。
(请参阅下面的 UPDATE 部分)当您遇到无法拉取所有字段和可能重命名字段的问题时,处理数据迁移的另一种选择是使用SqlBulkCopy.NET 中的类,因为它可以很好地处理这些事情。您可以在 SSIS 中创建一个 C# 任务来使用此类,也可以使用 SQLCLR 存储过程,例如DB_BulkCopy,它是SQL# SQLCLR 库的一部分(我是该库的作者,但该存储过程在 Free版本)。我在以下答案中更详细地描述了这一点:
更新
在我发布上述建议后的第二天添加了以下要求:
我必须将所有这些表合并到一张表中,而不会重复。
鉴于这一新要求,我认为使用SqlBulkCopy替代选项不如以我首先描述的方式坚持使用 SSIS 有吸引力。使用SqlBulkCopy/ DB_BulkCopy对数据进行重复数据删除的唯一方法是从目标服务器/目标服务器运行该进程,将数据加载到临时表中(它必须是一个全局临时表——意思是从 开始##)源服务器使用SqlBulkCopy或DB_BulkCopy,然后从全局临时表插入真正的目标表,同时根据确定重复项的任何规则过滤掉“重复项”。
| 归档时间: |
|
| 查看次数: |
902 次 |
| 最近记录: |