将平面文件导入SQL - 添加字符后不会抛出错误

问题描述 投票:3回答:3

我正在开发一个包,将数据从文本文件加载到SQL服务器上的表中。

文本文件具有以下格式的数据

enter image description here

我在这里包括平面文件连接管理器 -

enter image description here

我创建了一个测试表

enter image description here

执行包并将数据移动到表上。

enter image description here

然后,编辑其中一列以包含更多字符(在第二列中包含s)

enter image description here

而不是包错误输出..成功运行并将额外的字符移动到下一列。

enter image description here

有人可以帮帮我吗?

sql-server csv ssis etl flat-file
3个回答
4
投票

Why package is not throwing an exception?

这是正常的,您将平面文件源读取为固定宽度列(固定宽度或右边是Ragged),具有以下规格。

“Ragged Right”,与“Fixed Width”完全相同,只是它允许您选择在每行数据的末尾插入换行符(或CRLF等)。

(您可以检查平面文件连接管理器以查看规范)

初始状态

数据:

0001aijn fkds jmcl wuj

规格和结果:

Col001: From 0 -> 3      '0001'
Col002: From 4 -> 7      'aijn'
Col003: From 8 -> 11     ' fkd'
Col004: From 12 -> 13    's '
Col005: From 14 -> 18    'jmcl '
Col006: From 19 -> end   'wuj'

第二国

因此,当您添加S字符时,数据如下所示:

0001aijns fkds jmcl wuj

规格和结果:

Col001: From 0 -> 3      '0001'
Col002: From 4 -> 7      'aijn'
Col003: From 8 -> 11     's fk'
Col004: From 12 -> 13    'ds'
Col005: From 14 -> 18    ' jmcl'
Col006: From 19 -> end   ' wuj'

有关更多信息:


Is there any work around...where it can throw error in such case?

  1. 在平面文件连接管理器中使用Delimited Format
  2. 转到“高级”选项卡,删除除一列之外的所有列
  3. 将数据类型更改为DT_WSTR,将长度更改为4000
  4. 在数据流任务中添加平面文件源,条件分割,脚本组件,派生列转换,OLEDB目标如下图所示

enter image description here

  1. 使用条件拆分根据列的长度过滤行: LEN([Column0]) == 22

enter image description here

  1. 在脚本组件中编写以下代码(如果有一行长度> 22,则用于引发错误): Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer) Throw New Exception("Length constraint violated") End Sub
  2. 指定以下派生列

enter image description here

  1. 将结果映射到OLEDB Destination

2
投票

我认为两种情况的行为没有任何区别。两次都是从输入文件中读取4个字符并将它们放在第1列中,将接下来的4个字符读入第2列,将接下来的4个字符读入第3列,然后将2个字符放入第4列,将5个字符读入第5列,最后4个字符(如果有那么多)留在第6列。注意它将空格计为字符,所以在第一次运行中它包括第3列条目开头的aijnfkds之间的空格,而在第二次运行额外的s现在是第3列中的第一个字符,空格成为第二个字符。


0
投票

您需要更新SSIS包以适应增加的长度。

为此,右键单击目标目标 - 显示高级编辑器:enter image description here

检查并修复内部列的长度:

enter image description here

最后检查外柱的长度:

enter image description here

希望这有帮助:)

© www.soinside.com 2019 - 2024. All rights reserved.