0

所以我正在尝试使用 SSIS 进行批量插入并不断获得:

“Microsoft SQL Native Client”Hresult:0x80004005 描述:“字符串或二进制数据将被截断。”

即使我已经将每一列的数据转换为与插入行的表完全相同的类型。我使用了一个视图,数据看起来就像它应该在数据库插入步骤之前一样。仍然得到错误。

接下来,我进入 sql server management studio 并在该该死的表中设置了一个插入查询,但仍然得到相同的截断错误。然后我设置了 ANSI_WARNINGS OFF 并且插入的工作数据在表中看起来不错。现在,当我尝试删除此行时,出现截断错误。

除了对这种情况的任何基本输入之外,我的问题是如何关闭 SSIS 中的 ANSI_WARNINGS 以便批量加载可以继续?

4

4 回答 4

2

听起来您的列太窄而无法接受您提交的数据。

你能验证这是否是这种情况吗?

当我们与第三方确定架构时,我经常遇到一个非常类似的问题。

您可以选择视图中所有列的 LEN 吗?这可以帮助找到问题。

除此之外,我发现的唯一方法是打印出源数据列实际长度的报告。

于 2009-04-02T15:19:46.363 回答
2

听起来您有一行(可能更多,但只需要一行!)其中您的数据值超过了表列的长度。将数据转换为较短的类型会将错误移动到从目标进行转换的任何转换。我建议创建一个平面文件目标,并将转换的错误输出绑定到它。将错误结果更改为“重定向行”。这将允许所有有效行通过,并为您提供被截断的行的副本供您手动处理。

于 2009-04-02T15:21:01.993 回答
1

您要插入的表上是否有触发器?那么错误可能来自触发器执行的操作。

于 2009-04-02T15:16:09.703 回答
0

事实证明,在 SSIS 中,您可以使用“数据访问模式 > 表或视图:快速模式”设置 OLE DB 目标。当我选择此设置时,批量插入没有任何警告或错误,并且数据库中的数据看起来很完美。不确定此更改到底做了什么,但它起作用了,在一个 SSIS 插入 16 小时后,我对结果感到满意。

感谢您的建议。

于 2009-04-02T16:25:19.030 回答