SSIS - 仅在记录不存在时才根据匹配多列中的至少一列插入记录
SSIS - Inserting records only if they don't already exist based on matching at least 1 of multiple columns
我有一个 SSIS 包,可以将平面文件中的数据插入数据库 table。为了这个例子,假设我想插入 User
条记录。数据记录来自其他现有数据库,因此它们已经包含以前生成的主 ID,我们希望保留并继续使用。这些记录还包括一个电子邮件字段,该字段在目的地中也应该是唯一的 table;这是由架构强制执行的。给定的批次可能包括以前“迁移”的记录,以及用户可能在多个具有相同电子邮件地址的原始系统中。除了避免错误之外,我还想通过将它们写入文件来跟踪任何可能的重复项(在 UserID 或电子邮件字段上)。
因为可以在 2 个字段中的任何一个上进行匹配,我是否需要链接 2 个查找转换?或者有没有办法在使用多列时指定 OR 操作而不是 AND?或者是否有更适合我使用的变换?
提前致谢。
好吧,让我们分开你的问题。
我可以在两个字段上使用 OR 条件进行查找吗?
是的,你可以。
假设你正在通过 User
table 进行查找。在查找转换 General 部分 - 将 Partial cache 或 No cache 指定为 Cache模式。然后在 Connection 部分设计您的查询。 重要 -- 将您的数据流字段映射到 Columns 部分中的查询列。至此准备工作完成。
转到高级部分并勾选修改SQL语句标志。将下面的 SQL 语句修改为
select * from (SELECT [ColA], [ColB], ...
FROM [User]) [refTable]
where [refTable].[ColA] = ? OR [refTable].[ColB] = ?
然后 - 点击 Parameters 按钮并指定应映射到第一个 ?
- Parameter0 的数据流列,等等。
如您所见,这是可能的,但并不容易。
您应该使用两次查找还是一次复杂查找?
我会进行两次查找,因为它允许您更好地控制和错误报告 - 使用 OR
语句您只能报告匹配的唯一字段中的某些内容。进行特定的查找可以让您更加具体,并在需要时设计特殊的流程步骤。
我有一个 SSIS 包,可以将平面文件中的数据插入数据库 table。为了这个例子,假设我想插入 User
条记录。数据记录来自其他现有数据库,因此它们已经包含以前生成的主 ID,我们希望保留并继续使用。这些记录还包括一个电子邮件字段,该字段在目的地中也应该是唯一的 table;这是由架构强制执行的。给定的批次可能包括以前“迁移”的记录,以及用户可能在多个具有相同电子邮件地址的原始系统中。除了避免错误之外,我还想通过将它们写入文件来跟踪任何可能的重复项(在 UserID 或电子邮件字段上)。
因为可以在 2 个字段中的任何一个上进行匹配,我是否需要链接 2 个查找转换?或者有没有办法在使用多列时指定 OR 操作而不是 AND?或者是否有更适合我使用的变换?
提前致谢。
好吧,让我们分开你的问题。
我可以在两个字段上使用 OR 条件进行查找吗?
是的,你可以。
假设你正在通过 User
table 进行查找。在查找转换 General 部分 - 将 Partial cache 或 No cache 指定为 Cache模式。然后在 Connection 部分设计您的查询。 重要 -- 将您的数据流字段映射到 Columns 部分中的查询列。至此准备工作完成。
转到高级部分并勾选修改SQL语句标志。将下面的 SQL 语句修改为
select * from (SELECT [ColA], [ColB], ...
FROM [User]) [refTable]
where [refTable].[ColA] = ? OR [refTable].[ColB] = ?
然后 - 点击 Parameters 按钮并指定应映射到第一个 ?
- Parameter0 的数据流列,等等。
如您所见,这是可能的,但并不容易。
您应该使用两次查找还是一次复杂查找?
我会进行两次查找,因为它允许您更好地控制和错误报告 - 使用 OR
语句您只能报告匹配的唯一字段中的某些内容。进行特定的查找可以让您更加具体,并在需要时设计特殊的流程步骤。