【问题标题】:Why doesn't SSIS OLE DB Command transformation insert all the records into a table?为什么 SSIS OLE DB 命令转换不将所有记录插入表中?
【发布时间】:2011-08-01 19:48:08
【问题描述】:

我有一个 SSIS 包,它从 SQL 数据库中的表中获取数据,并在另一个数据库的表中插入(或更新现有行)。

这是我的问题,在lookup 之后,我插入或更新行,但超过一半进入插入的行没有添加到表中。

对于插入,我使用了一个 Ole Db Command 对象,在该对象中我使用了我测试过的插入命令。我发现了为什么程序包在没有错误通知的情况下运行,但仍然没有在表中插入所有行。

我已经检查了 sqlProfiler,它说命令是 RCP:Completed 我认为这意味着它应该有效。

如果我在 sql management studio 中使用 sql profiler 给我的数据手动插入(它使用 toe 执行插入语句的值),它可以工作。我检查了数据,一切正常(未插入的行中没有非法数据)。

我完全不知道如何解决这个问题,有人有想法吗?

【问题讨论】:

  • 你的问题很模糊:标题提到“日期格式”但问题没有;您说您“发现”了为什么包裹不能满足您的要求,但您没有解释这意味着什么;您没有给出手动工作的 INSERT 语句的示例;您没有提及任何特定的数据类型或您如何知道没有非法数据;你没有提到 SSIS 版本等。
  • Ole 命令在涉及复杂的 SQL 语句时使用。我们能看到 SQL 命令里面的 SQL 语句吗?
  • @Pondlife,试图修复它,发现它不是日期而是其他东西,忘记更改标题,更改标题
  • @Internet Engineer 声明并不复杂,它是一个简单的插入。这就是我被证明这样做的方式,我认为我做错了一段时间,谢谢你清理它
  • 所以,即使使用 oleDb 目标,问题也是一样的。这里奇怪的是,我在查找之前将所有数据都放在了一个缓冲表中,没有问题。

标签: sql ssis insert oledb


【解决方案1】:

使用 OLE DB 命令而不是 OLE DB 目标来插入记录的任何具体原因?

编辑 1:

因此,您看到 x 行(例如 100)从查找转换匹配输出发送到 OLE DB 目标,但只有 y 行(例如 60)被插入。那是对的吗?不要插入到您的实际目标表中,而是尝试插入到一个虚拟表中以查看是否所有行都被正确重定向。您可以通过单击 OLE DB 目标上的 New... 按钮来创建一个虚拟表。它将为您创建一个匹配输入列的表。这可能有助于缩小问题范围。

编辑 2:

您尝试使用的表的名称是什么?我不认为这很重要。我只是好奇该名称是否是任何保留关键字。我能想到的另一件事是是否有任何其他进程可能会触发目标表上的某些操作(来自包内或包外)?我怀疑某些其他进程可能正在从表中删除行。

【讨论】:

  • Broadcasting_IBI 是表的名称,投票赞成,有一个进程正在删除一些行,不敢相信我没有考虑过,谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-23
相关资源
最近更新 更多