使用SSIS更新表

时间:2009-05-18 21:10:17

标签: sql-server-2005 ssis dataflowtask

我正在尝试使用基于公共密钥的另一个表中的数据更新表中的字段。如果它是直接的SQL,它将类似于:

Update EHSIT
set e.IDMSObjID = s.IDMSObjID
from EHSIT e, EHSIDMS s
where e.SITENUM = s.SITE_CODE

但是,这两个表不在同一个数据库中,所以我正在尝试使用SSIS进行更新。哦,sitenum / site_code在一个中是varchar,在另一个中是nvarchar,所以我必须进行数据转换才能匹配。

我该怎么做? 我有一个数据流对象,源为EHSIDMS,目的地为EHSIT。我有一个数据转换将unicode转换为非unicode。但是如何根据匹配进行更新?我已尝试使用SQL命令作为数据访问模式,但它似乎没有源表。如果我只是映射要更新的字段,它如何根据匹配的字段限制它?

我准备将我的源表导出到Excel或其他东西,然后尝试从那里输入,虽然似乎所有这些都会让我删除数据转换步骤。

是否应该有更新数据任务?它是那些数据流转换任务之一,我只是不知道它是什么?

4 个答案:

答案 0 :(得分:8)

您可以使用SQLCommand(带参数),但您将有效地为每一行写UPDATE。我发现最好在目标端编写一个临时表(来自远程端的所有数据或SSIS确定的数据都要更改),并使用单个SQL UPDATE来执行更新。 / p>

答案 1 :(得分:2)

您始终可以使用完整的数据库名称。

UPDATE server1.databasename.EHSIT
SET E.IDMSOBJID = S.IDMSOBJID
FROM server1.databasename.EHSIT E, server2.databasename.EHSIDMS S
WHERE E.SITENUM = S.SITE_CODE



[serverpath].[database].[databaseobject]

答案 2 :(得分:0)

我发现使用缓慢变化的维度,将业务键作为您匹配的值以及您希望更新为更改值的其他属性似乎有效。

Devtron,我试过这个并且得到有关服务器路径的错误,其中有很多/。我还被告知,这是非常低调的,特别是如果它是一个经常发生的操作。

答案 3 :(得分:0)

I would use a lookup transformation 无需登台 - 无需编写SQL代码 - 这就像SSIS的意图一样!