我尝试使用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
答案 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)
接下来,使用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)