如果一个已经存在的记录被发送到更新查询,会发生什么?它会被闲置吗?
我有一个 abinitio 输出文件,其中包含要更新的记录(未插入)。我只需要收集那些实际更新的记录。那么,我们如何才能将数据库中与之前完全相同的记录(未更新)和至少更新了一个字段的记录分开呢?
如果一个已经存在的记录被发送到更新查询,会发生什么?它会被闲置吗?
我有一个 abinitio 输出文件,其中包含要更新的记录(未插入)。我只需要收集那些实际更新的记录。那么,我们如何才能将数据库中与之前完全相同的记录(未更新)和至少更新了一个字段的记录分开呢?
这是一个 ETL 问题,因为无论行是否发生更改,DB2 都会进行更新。我不详细了解 Ab Initio,但您必须在 DB2 更新之前进行更改检测。通常 ETL 工具具有某种“更改捕获”/“比较”/“差异”功能来检测更改。
您可以尝试使用更新表组件中的未使用端口,还可以查看 ActionRequired Flag。
确定是否会发生更新的简单方法,或者更好的是,仅提供更新,是连接数据库中的数据(选择语句将选择更新文件要更新的每条记录),并将其与数据库中所有字段的记录作为键。出现在与更新文件有关的未使用端口上的那些记录将执行更新操作。
我的第一种方法与 Alex 建议的方法相同,但似乎以所有字段为键加入数据库将需要更多时间和资源。更好的方法是在重新格式化选择参数或按每个字段的表达式过滤器中比较现有值和要更新的新值。这将只给出那些将实际更新的记录。Michael 也是对的,无论是否是实际更新,DB2 都会更新。因此,未使用的端口不会给出未更新的记录。