如何防止SSIS从数据库中已存在的文件导入数据?

时间:2012-04-25 10:13:21

标签: sql ssis

每天我都会将一些csv数据加载到我的表中。我的表有日期列,现在我需要使用回滚功能,这样,如果我的表中已存在数据,则必须回滚,否则必须根据我的Asofdate参数进行插入。

我知道这有点令人困惑,让我更清楚。

我的表有eid,ename,asofdate列,现在当我每天插入新文件时,它必须查看该文件是否已经基于asofdate存在于该表中,如果数据存在,它应该回滚数据。 / p>

3 个答案:

答案 0 :(得分:10)

正如@Diego所提到的,您将在数据流任务中使用Lookup transformation来实现该功能。

您的数据流任务看起来像这样。这里,Flat文件源读取CSV文件,然后将数据传递给Lookup转换。此转换将检查目标表中的现有数据(例如,表名为 dbo.Destination )。 Lookup转换的配置显示在下一个屏幕截图中。如果没有匹配的记录,则CSV文件中的数据将被发送到OLE DB目的地,否则数据将被丢弃。

Data flow task

Lookup transformation中,您将在“连接”选项卡上选择目标数据库表。在“列”部分,您将验证要检查现有数据的所有列。在这种情况下,来自CSV文件的列 eid name asofdate 将根据数据库表dbo中相同名称的列进行验证。目的地。如果这三列的传入值与表中的任何行匹配,则数据将不会在流中进一步发送。

希望能给你一个想法。

Lookup table configuration

Lookup check

答案 1 :(得分:2)

正确的术语不是回滚。回滚是指插入内容并撤消事务。如果数据已存在,则不应插入数据。

您需要的是在DBSource和DBDestination之间进行查找转换。此查找应检查目标表上是否存在数据,如果不存在,则将其插入

答案 2 :(得分:0)

对于这种要求,您可以在表格上使用Insert TRIGGER,在插入数据时,如果要检查每条记录,可以检查表格中是否存在数据

在表格中插入文件之前,您可以使用 if exists 语句,如果您只想检查记录是否存在或不存在 像这样的SQL:If Exists Update Else Insert