Sau*_*mar 3 ssis sql-server-2008
我有一个数据流,其中有一个数据库源和一个平面文本文件目的地(由管道'|'分隔).数据库源正在从变量中获取SQL查询.
问题是,如果我的数据库字段大小为say,firstname和lastname是30个字符,我得到输出为(以点表示的空格)
saurabh......................|kumar.......................
我需要的是要修剪的字段,以便实际输出
saurabh|kumar
我有超过40列要写,我不想RTRIM在我的BIG sql查询中的每一列之后手动插入:(
我应该补充说,源可以返回多达50,000行.我正在考虑在其间放置一个脚本组件,但处理每一行可能会对性能产生影响.
有任何想法吗?
你有很多选择,但由于你的情况,有些选择显然是不可取的或不可能的.
首先,我假设数据中的尾随空格是因为源列的数据类型是CHAR或NCHAR.您可以将源数据库中的数据类型更改为VARCHAR或NVARCHAR.这可能不是一个好主意.
如果源数据中的数据类型为VARCHAR或NVARCHAR,并且尾随空格位于数据中,则可以更新数据以删除尾随空格.这可能也没什么吸引力.
因此,您拥有SSIS,处理此问题的最佳位置是数据流.不幸的是,您必须为每个具有尾随空格的列开发解决方案.我认为你不会找到一个快速而简单的"修复所有列"解决方案.
您可以使用脚本转换进行数据修剪,但必须编写代码才能完成工作.或者,您可以使用派生列转换组件.在派生列转换中,您将为每个需要修剪的列添加派生列.例如,您将拥有firstname列和lastname列.派生列值将替换现有列值.
在派生列转换中,您将使用SSIS表达式语法来修剪数据.firstname和lastname trim表达式将是
RTRIM(firstname)
RTRIM(lastname)
Run Code Online (Sandbox Code Playgroud)
Derived Column转换的性能可能会更好,但它与脚本解决方案可能没什么不同.但是,派生列转换可能更容易阅读和理解.