如何强制SSIS Excel数据源将列读取为文本类型?
解决SSIS Excel数据源类型检测导致文本值读为NULL的问题
核心解决方案:强制Excel驱动按文本读取混合类型列
步骤1:修改Excel连接管理器的连接字符串
在SSIS的连接管理器面板中,找到你的Excel连接:
- 右键点击该连接,选择「属性」
- 在「ConnectionString」属性中,添加
IMEX=1参数,最终格式类似:
注:Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\你的文件路径.xlsx;Extended Properties="Excel 12.0 Xml;HDR=YES;IMEX=1;"HDR=YES表示Excel第一行是表头,若没有表头则改为HDR=NO
步骤2:调整Excel数据源高级编辑器的列类型
打开数据流任务中的Excel数据源,进行如下操作:
- 点击组件右上角的「高级编辑器」按钮
- 切换到「输入和输出属性」选项卡
- 依次展开「Excel源输出」→「外部列」,找到目标列:
- 修改该列的「数据类型」为
Unicode string [DT_WSTR],长度设置为1000(与SQL表的nvarchar(1000)匹配)
- 修改该列的「数据类型」为
- 再展开「Excel源输出」→「输出列」,对对应列执行同样的修改:
- 将「数据类型」改为
Unicode string [DT_WSTR],长度设为1000
- 将「数据类型」改为
- 点击「确定」保存设置
可选:调整Excel驱动的全局类型扫描行数
如果上述操作后仍有问题,可修改注册表调整驱动默认的类型判断行数:
- 32位系统注册表路径:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel - 64位系统注册表路径:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Jet\4.0\Engines\Excel - 修改
TypeGuessRows的值为0(表示扫描全列判断类型) - 注:此为全局设置,会影响所有使用该Excel驱动的程序,操作前请备份注册表
内容的提问来源于stack exchange,提问作者variable
相关产品推荐
相关产品推荐

