导入平面文件到Azure SQL时Location列unicode类型转换报错如何解决
问题根源
该报错的核心原因是整条数据导入链路的字段编码没有完全统一,仅修改单一步骤的字段类型无法解决转换冲突,你可以按照以下步骤逐一排查修复:
解决方案
方案1:统一链路为非unicode编码(适配目标表varchar/char类型)
- 回到平面文件源的配置界面,在「高级」选项卡中将Location字段的类型显式设置为
string [DT_STR],同时代码页选择与目标Azure SQL表排序规则匹配的编码(比如拉丁字符集选1252,中文GBK选936) - 检查合并操作的另一数据源的对应关联字段,也统一设置为
string [DT_STR],且长度、代码页完全一致,避免合并操作自动触发类型转换 - 最后在目标表映射环节,关闭自动类型转换选项,直接将
DT_STR类型的Location字段映射到目标表的对应字段即可
方案2:统一链路为unicode编码(适配目标表nvarchar/nchar类型)
- 平面文件源配置的「高级」选项卡中将Location字段类型显式设置为
Unicode string[DT_WSTR],字段长度与目标表的nvarchar长度保持一致 - 合并操作的另一数据源对应关联字段也同步修改为
Unicode string[DT_WSTR],长度保持一致 - 映射环节直接匹配
DT_WSTR到目标表的nvarchar字段即可
应急规避方案
如果临时需要快速完成导入,可以先将目标表的Location字段类型修改为nvarchar(max)完成数据导入,之后再通过T-SQL转换为你需要的目标类型:
-- 示例代码,替换为你自己的表名、字段长度、排序规则 ALTER TABLE 你的表名 ADD Location_temp VARCHAR(100); UPDATE 你的表名 SET Location_temp = CAST(Location AS VARCHAR(100)) COLLATE SQL_Latin1_General_CP1_CI_AS; ALTER TABLE 你的表名 DROP COLUMN Location; EXEC sp_rename '你的表名.Location_temp', 'Location', 'COLUMN';
注意事项
仅在导入映射页修改字段类型不会生效,必须从数据源输出步骤开始统一全链路的类型配置,否则中间转换步骤会自动生成隐式类型转换触发报错。
内容的提问来源于stack exchange,提问作者user4912134
相关产品推荐
相关产品推荐

