SSIS:将平面文件中Y/N字符串转换为二进制值导入MS SQL Server
当然可以在SSIS里实现这个需求!我给你分享几种实用的方法,你可以根据自己的场景灵活选择:
方法1:派生列转换(最简便直接)
这是处理这类简单映射最常用的方式,几步就能搞定:
- 先把你的平面文件作为数据源添加到数据流任务中
- 拖入派生列转换组件,将数据源的输出连接到这个组件
- 在派生列编辑器里,针对需要转换的列,编写条件表达式:
这个表达式会把"Y"转为1,"N"转为0,其他非预期值返回NULL(你可以根据需求调整默认值,比如改成0或者抛出错误)[源列名] == "Y" ? 1 : ([源列名] == "N" ? 0 : NULL) - 最后把派生出来的新列,映射到目标SQL Server表的
bit类型列即可(MS SQL的bit类型正好对应你要的二进制1/0)
方法2:查找转换(适合可扩展的映射规则)
如果以后可能需要修改Y/N的对应规则,或者有更多枚举值要映射,用查找转换会更灵活:
- 先准备一个小型的查找数据集:可以用脚本源生成两行数据(比如键为"Y"对应值1,键为"N"对应值0),也可以用一个临时表存储这个映射关系
- 添加查找转换组件,连接数据源和查找数据集
- 设置查找条件:用源文件里的Y/N列匹配查找数据集中的键列
- 将查找得到的1/0值映射到目标表的对应列
方法3:脚本组件(适合带校验的复杂逻辑)
如果需要额外的校验逻辑(比如过滤掉非Y/N的值,或者处理大小写混合的情况),脚本组件是更好的选择:
- 添加脚本组件(选择「转换」类型),连接到数据源
- 在脚本编辑器里,勾选需要处理的输入列,然后添加一个输出列(比如命名为
ConvertedBit,数据类型选DT_BOOL或DT_I1) - 编写C#或VB代码处理逻辑,比如C#示例:
public override void Input0_ProcessInputRow(Input0Buffer Row) { // 忽略大小写匹配,避免漏转y/n的情况 if (Row.SourceColumn.Equals("Y", StringComparison.OrdinalIgnoreCase)) { Row.ConvertedBit = 1; } else if (Row.SourceColumn.Equals("N", StringComparison.OrdinalIgnoreCase)) { Row.ConvertedBit = 0; } else { // 处理异常值,这里设为NULL,也可以抛出错误提示 Row.ConvertedBit_IsNull = true; } } - 最后把输出列映射到目标表的
bit列就行
小提示:记得确保目标SQL Server表的对应列是bit类型,这样存储的就是真正的二进制1/0,和你的需求完全匹配。
内容的提问来源于stack exchange,提问作者Scott
相关产品推荐
相关产品推荐

