使用SSIS Packge更新特定列

时间:2018-06-06 04:14:36

标签: ssis

我尝试使用SSIS包更新特定列,但不确定有什么问题,下面是详细信息。

我有2张桌子详情&用户, 我正在尝试构建一个包,它将找到条件

的行
DETAIL.ID <> 'EXCLUDE',
DETAIL.USERNAME <>'N/A',
and DETAIL.USERNAME <> USER.USERNAME

我有行后,我想要使用USER.USERNAME字段更新USER表格中的DETAIL.USERNAME列。

我按如下方式构建了一个包:

Source - DETAIL table
CONDTIONS -   DETAIL.ID <> 'EXCLUDE' & 
              DETAIL.USERNAME <>'N/A'
LOOKUP - USER table
CONDITION - DETAIL.USERNAME <> USER.USERNAME
DERIVED COLUMN - REPLACE USER.USERNAME with DETAIL.USERNAME 
DESTINATION - USER

此软件包失败并显示错误,表示它正在添加额外的行而不是更新它。enter code here

Screenshot of the package

2 个答案:

答案 0 :(得分:1)

部分地,这是预期的行为,因为无法告诉OLEDB Destination您正在更新而不是插入。 SSIS数据流任务流适用于read from source -> transform -> insert in destination

为了实现你想要的,我有一个更简单的方法:

创建Data flow task

  • Source - 详情表。使用where子句过滤以下条件:
    WHERE DETAIL.ID <> 'EXCLUDE' & DETAIL.USERNAME <>'N/A'

  • LOOKUP (no match output) - user.username列上的USER表 (这将带来具有与user.username不同的用户名的所有详细记录)

  • DESTINATION - 登台表(stg_detail)

img1

接下来,使用Execute SQL Task运行批量更新。

语法:

UPDATE x
SET x.username = stg_detail.username
FROM user x
INNER JOIN stg_detail
ON x.ID = stg_detail.ID

答案 1 :(得分:0)

因此,我的要求略有不同,因为我是从Excel加载的,需要更新一个表并插入到另一个表中。但是对于“如何在SSIS中更新列”这一问题,我决定使用Conditional Split(它基本上会创建一个内存表,因此谨慎使用)并然后是OLE DB Command,这使我可以跳过临时表的创建并使用我的UPDATE语句中先前步骤的输出。

命令文本仅为UPDATE Table1 SET Col1=? WHERE ID=?

SSIS Package Execution Path

Ta-da!在SSIS中经过全面验证的UPDATE