gpt4 book ai didi

ssis - 哪个 SSIS 转换可以执行 SQL 查询中使用的 'NOT IN' 约束?

转载 作者:行者123 更新时间:2023-12-01 10:02:13 24 4
gpt4 key购买 nike

我有两个具有相似列的 OLEDB 数据源:

TMP_CRUZTRANS
-------------
CUENTA_CTE numeric (20,0)

TMP_CTACTE_S_USD
----------------
CON_OPE numeric(20,0)

我需要减去这两个表之间所有相似的值并保留不同的行。 SSIS 中是否有可以执行通常在 SQL 查询中使用的 NOT IN 约束的转换/任务?

目前,我正在Control Flow 上使用Execute SQL Task 执行此操作。

enter image description here

顶部的数据流创建了第一个表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)

最后,有了新表 TMP_CYA,我可以继续我的工作了。

这种方法的问题是 TMP_CRUZTRANS 有大约 500 万行,因此使用 Execute SQL Task 将所有这些数据插入到表中非常慢。执行此操作大约需要 5 个小时。这就是为什么我需要在数据流任务中执行此操作。

最佳答案

您可以使用数据流任务中可用的查找转换来实现您的要求。

这是一个示例,说明了您要实现的目标。

创建一个带有数据流任务的包。在数据流任务中,使用 OLE DB 源从源表 TMP_CRUZTRANS 中读取数据。使用查找转换来验证给定列之间的表 dbo.TMP_CTACTE_S_USD 是否存在值。然后将不匹配的输出重定向到 OLE DB 目标以将行插入表 dbo.TMP_CYA

下面是数据流任务代替您当前使用的执行 SQL 任务的样子。

Data flow task

如下所示配置查找转换:

在“常规”选项卡页面上,从指定如何处理没有匹配条目的行中选择Redirect rows to no match output,因为您只对不匹配的行感兴趣。

Lookup transformation General

在“连接”标签页上,选择合适的 OLE DB 连接管理器并选择表 dbo.TMP_CTACTE_S_USD。这是您要验证数据的表。

Lookup transformation Connection

在 Columns 标签页上,将列 CUENTA_CTE 拖放到 CON_OPE 上以建立源表和查找表之间的映射。单击“确定”。

Lookup transformation Columns

当您将查找转换OLE DB 目标 连接时,将出现输入输出选择 对话框。请确保选择 Lookup No Match Output

这是执行包之前的示例。

Before execution

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

Execution

您会注意到,执行包后目标表现在包含两个不匹配的行。

After execution

希望对您有所帮助。

关于ssis - 哪个 SSIS 转换可以执行 SQL 查询中使用的 'NOT IN' 约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14606432/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com