我在解析非结构化文本文件时遇到问题。我尝试将所有内容上传到一个数据类型为DT_STR的列,但由于我的文件中有特殊字符,如“=”,因此会抛出错误。我试过DT_TEXT数据类型,效果很好。但是我无法对列执行任何操作。我需要删除该列中的空行,这可以通过'条件拆分'来完成。但条件是:
[column 0]!=""
不起作用并抛出以下错误:
数据流任务错误[条件分割[32]]:数据类型“DT_TEXT”和“DT_WSTR”与二进制运算符“!=”不兼容。操作数类型无法隐式转换为操作的兼容类型。要执行此操作,需要使用强制转换运算符显式转换一个或两个操作数。
数据流任务错误[条件分割[32]]:尝试设置二进制操作的结果类型“[Column 0]!=”“”失败,错误代码为0xC0047080。
数据流任务错误[条件分割[32]]:计算表达式“[Column 0]!=”“”失败,错误代码为0xC0047084。表达式可能有错误,例如除以零,在分析时无法检测到,或者可能存在内存不足错误。
数据流任务错误[条件分割[32]]:“条件分割。输出[案例1]”表达式“[列0]!=”“”无效。
数据流任务错误[条件拆分[32]]:无法在“条件拆分输出[案例1]”上设置属性“表达式”。
其他信息:
HRESULT的异常:0xC0204006(Microsoft.SqlServer.DTSPipelineWrap)
按钮:
我之前使用c#脚本进行了解析。但现在我需要避免编码。任何有关如何解析此文件的想法都表示赞赏。三江源
答案 0 :(得分:1)
让我们打破这个
数据类型“DT_TEXT”和“DT_WSTR”与二元运算符“!=”
不兼容
您有一个表达式[column 0]!=""
,空字符串""
是DT_WSTR,[column 0]
是DT_TEXT数据类型。如错误消息所示,您无法测试这些类型之间的不等于条件。
我会查看将第0列转换为DT_WSTR或只是检查长度。 LEN([column 0]) > 0
更大的问题是您的文件不是“非结构化文本文件”。它非常有条理。列标题位于第3行(基于1计数),数据从5开始。数据本身从此处看起来是固定宽度。
你如何处理SSIS?创建Ragged Right类型的平面文件连接管理器。指示没有标题列并跳过第5行中的前4行/数据开始。通过指定宽度创建列,现在您的数据流更简单,包将运行得更快。