截断错误SQL Server 2005删除/插入

时间:2009-04-02 15:14:13

标签: sql-server ssis bulkinsert truncation

因此,我尝试使用SSIS进行批量插入并不断获取:

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

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

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

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

4 个答案:

答案 0 :(得分:2)

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

您能否确认是否是这种情况?

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

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

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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

您插入的桌子上是否有触发器?然后错误可能来自触发器执行的操作。

答案 3 :(得分:0)

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

感谢您的建议。