SSIS字符串截断错误

时间:2013-07-02 13:10:20

标签: sql-server-2005 ssis truncation

我有一个SQL Server 2005 SP2数据库,其中有一个poc_resp_city属性为nvarchar(35)的表。

2个月前它被更改为nvarchar(80)而没有在数据仓库中对齐相同的属性。 (仍有nvarchar(35)

SSIS数据加载包(经过两个月的正常工作)现在每次运行时都会返回包失败,并出现以下错误:

  

输出时输出列“poc_resp_city”(2250)出错   “OLE DB源输出”(11)。返回的列状态为:“Text is   截断的或一个或多个字符在目标代码中不匹配   页面。“。输出列”poc_resp_city“出错   (2250)输出“OLE DB源输出”(11)。列状态   返回的是:“文本被截断或一个或多个字符没有   匹配目标代码页。“。

     

SSIS错误代码DTS_E_PRIMEOUTPUTFAILED。 PrimeOutput方法   组件“源表”(1)返回错误代码0xC020902A。该   当管道引擎调用时,组件返回失败代码   PrimeOutput()。失败代码的含义由   组件,但错误是致命的,管道停止执行。   在此之前可能会发布错误消息以获取更多信息   关于失败。

关于此问题,包和数据库均未被修改。我知道我可以忽略这个错误,或者我可以做出安排以确保它正常工作但是我想提供一个正确和可接受的答案,为什么在修改后2个月出现这个错误?因为在这种情况下,我可能会错过重要的一步。

重要提示:我甚至没有一个超过35个字符的记录,因此绝不会发生截断。 (此警告属于某种SSIS验证步骤)

现在我想,也许经过一段时间后,SSIS包重新编译自己,现在它在元数据中看到这个错位(35 = / = 80),因为TruncationRowDisposition属性设置为RD_FailComponent ,它使组件失败。

我会排除代码页选项,因为每个数据库列都是nvarchar,而不是varchar,所以情况并非如此。

谢谢!

1 个答案:

答案 0 :(得分:0)

您需要刷新列的大小:

  1. 按下右键按下OLE DB Source -> Show Advanced Editor
  2. 选择Input and Output Properties标签 - > Ole DB Source Output - > Output Columns
  3. 在右侧面板Length行中插入新尺寸。
  4. 推送OK
  5. Show Advanced Editor

    或者,您可以从OLE DB Source复制查询,删除OLE DB Source,插入新的OLE DB Source并粘贴查询。这会自动刷新你的列。

    请记住,数据流中可能还有更多元素,您需要编辑列的长度,例如Data Converion ...