我有两个具有相似列的OLEDB数据源:
TMP_CRUZTRANS
-------------
CUENTA_CTE numeric (20,0)
TMP_CTACTE_S_USD
----------------
CON_OPE numeric(20,0)
Run Code Online (Sandbox Code Playgroud)
我需要减去这两个表之间的所有相似值,并保持不同的行.SSIS中是否存在可以执行NOT INSQL查询中通常使用的约束的转换/任务?
目前,我正在使用Execute SQL Taskon 执行此操作Control Flow.

顶部数据流创建第一个表TMP_CRUZTRANS(在其他2个表之间合并连接......但我想这对我的问题并不重要)我需要将第二个表保存为不同的值.
在Execute SQL Task,我有以下声明:
INSERT INTO [dbo].[TMP_CYA]
SELECT RUT_CLIE, CUENTA_CTE, MONTO_TRANSAC
FROM [dbo].[TMP_CRUZTRANS]
WHERE CUENTA_CTE NOT IN (SELECT CON_OPE FROM TMP_CTACTE_S_USD)
Run Code Online (Sandbox Code Playgroud)
最后,通过新表TMP_CYA我可以继续我的工作.
这种方法的问题在于TMP_CRUZTRANS有500万行,所以使用执行SQL任务将所有这些数据插入表中非常慢.执行此操作大约需要5个小时.这就是我需要在数据流任务中执行此操作的原因.
小智 7
您可以使用Lookup transformation数据流任务中的可用来满足您的要求.
这是一个示例,说明了您要实现的目标.
使用数据流任务创建包.在数据流任务中,使用OLE DB Source从源表中读取数据TMP_CRUZTRANS.使用查找转换来验证dbo.TMP_CTACTE_S_USD给定列之间的表的值是否存在.然后将不匹配的输出重定向到OLE DB Destination以将行插入表中dbo.TMP_CYA
以下是数据流任务代替您当前使用的执行SQL任务的方式.

配置Lookup transformation如下所示:
在"常规"选项卡页面上,选择" Redirect rows to no match output自",Specify how to handle rows with no matching entries因为您只对非匹配行感兴趣.

在"连接"选项卡页上,选择相应的OLE DB连接管理器,然后选择表dbo.TMP_CTACTE_S_USD.这是您要验证数据的表.

在Columns选项卡页面上,拖动CUENTA_CTE列并将其放在CON_OPE上以建立源表和查找表之间的映射.单击确定.

将查找转换与OLE DB目标连接时,将出现" 输入输出选择"对话框.请务必选择Lookup No Match Output.
这是执行包之前的示例.

您可以看到只有2行不匹配的行已传输到OLE DB目标.

您可以注意到目标表现在包执行后包含两个不匹配的行.

希望有所帮助.
| 归档时间: |
|
| 查看次数: |
4968 次 |
| 最近记录: |