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