【问题标题】:Delete records using Informatica PowerCenter使用 Informatica PowerCenter 删除记录
【发布时间】:2021-06-27 17:41:24
【问题描述】:

我有一个简单的映射,可以删除目标表中的记录。我没有使用“更新策略”转换,而是设置会话属性“删除”以删除记录。

所述表具有复合主键(有 10 列)。如果所有这些列都有价值,那么它工作正常。但是很少有记录其中一列具有 NULL 值。在这种情况下,它不会删除该记录。

有人可以告诉我如何处理这种情况吗?

【问题讨论】:

  • 目标表的DBMS是什么?大多数 DBMS 不允许您在允许空值的列上创建 PK。您能否将目标的完整 CREATE TABLE 语句添加到您的问题中?
  • DBMA: MS SQL Server 它是在其上定义的复合唯一索引。由 10 列组成。
  • 唯一索引与主键不同 - 主要区别之一是 UK 可以有空列,而 PK 不能。您的表没有定义 PK 吗?

标签: sql-server informatica


【解决方案1】:

这是可能的,因为 informatica 在删除数据时会像这样触发 sql - delete from tab where key1=v1 and key2=v2。因此,如果 v2 为空,则删除查询可能会忽略该记录。
您可以使用目标更新覆盖属性来执行此操作。自己写sql删除数据。

DELETE FROM
  mytable
WHERE
  ID = :TU.ID 
  AND ISNULL(EMP_NAME,'Unspecified') = ISNULL(:TU.EMP_NAME,'Unspecified')

由于您在 infa 中定义了键,因此您应该不会遇到任何问题。但请注意,这些删除是逐行进行的,所以如果是一张大表,并且删除不遵循主键索引,删除每一行可能需要时间!

【讨论】:

  • 你能告诉我我需要在 Session 中做出哪些改变吗?使用 DELETE 选项,Informatic 不会采用更新的 SQL 如果我使用“将源行视为更新”,它会考虑更新的 SQL,但会被挂起。
  • 将源行视为更新 - 是正确的选项。您能否运行 1 行来测试解决方案。如果 1 ow 有效,则表示 sql 未遵循索引。请从 SQL Server 客户端查看它在 DB 中生成的 sql。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-04
相关资源
最近更新 更多