每天我都会将一些csv数据加载到我的表中。我的表有日期列,现在我需要使用回滚功能,这样,如果我的表中已存在数据,则必须回滚,否则必须根据我的Asofdate参数进行插入。
我知道这有点令人困惑,让我更清楚。
我的表有eid,ename,asofdate列,现在当我每天插入新文件时,它必须查看该文件是否已经基于asofdate存在于该表中,如果数据存在,它应该回滚数据。 / p>
答案 0 :(得分:10)
正如@Diego所提到的,您将在数据流任务中使用Lookup transformation
来实现该功能。
您的数据流任务看起来像这样。这里,Flat文件源读取CSV文件,然后将数据传递给Lookup转换。此转换将检查目标表中的现有数据(例如,表名为 dbo.Destination )。 Lookup转换的配置显示在下一个屏幕截图中。如果没有匹配的记录,则CSV文件中的数据将被发送到OLE DB目的地,否则数据将被丢弃。
在Lookup transformation
中,您将在“连接”选项卡上选择目标数据库表。在“列”部分,您将验证要检查现有数据的所有列。在这种情况下,来自CSV文件的列 eid , name 和 asofdate 将根据数据库表dbo中相同名称的列进行验证。目的地。如果这三列的传入值与表中的任何行匹配,则数据将不会在流中进一步发送。
希望能给你一个想法。
答案 1 :(得分:2)
正确的术语不是回滚。回滚是指插入内容并撤消事务。如果数据已存在,则不应插入数据。
您需要的是在DBSource和DBDestination之间进行查找转换。此查找应检查目标表上是否存在数据,如果不存在,则将其插入
答案 2 :(得分:0)
对于这种要求,您可以在表格上使用Insert TRIGGER,在插入数据时,如果要检查每条记录,可以检查表格中是否存在数据
或
在表格中插入文件之前,您可以使用 if exists 语句,如果您只想检查记录是否存在或不存在 像这样的SQL:If Exists Update Else Insert