SQL Server导出向导datetime列默认映射异常,如何配置默认映射?
调整SQL Server导出向导的默认类型映射规则
好问题!我之前跨版本导出数据库时也碰到过这个默认映射的坑,确实可以修改这个规则,不过得调整导出向导背后的配置文件,或者用更灵活的替代方案,下面详细说明:
方法一:修改全局类型映射配置文件
SQL Server导出向导基于SSIS,它的类型映射规则存储在XML配置文件里,操作步骤如下:
- 找到对应版本的映射文件路径:
对于SQL Server 2017(版本号140),路径一般是:C:\Program Files (x86)\Microsoft SQL Server\140\DTS\MappingFiles\MSSQLToMSSQL.xml - 以管理员身份打开编辑器(比如Notepad++),编辑这个XML文件:
搜索<SourceDataType Name="datetime">节点,你会看到默认的目标类型是smalldatetime,类似这样:
把目标类型改成<SourceDataType Name="datetime"> <DestinationDataType Name="smalldatetime" /> </SourceDataType>datetime:<SourceDataType Name="datetime"> <DestinationDataType Name="datetime" /> </SourceDataType> - 保存文件,重启SSMS确保配置生效,之后导出向导的默认映射就会把datetime保留为datetime了。
注意事项
- 修改前一定要备份原XML文件,避免配置出错无法恢复。
- 这个修改是全局生效的,所有后续使用导出向导的操作都会遵循新的映射规则,如果只是个别导出需要调整,不建议改全局配置。
- 目标SQL Server 2014完全支持datetime类型,所以这个修改不会有兼容性问题。
方法二:单次导出时手动调整(无需改全局)
如果只是偶尔导出,更省事的方法是在导出向导的列映射步骤手动修改:
- 进入“选择源表和视图”步骤后,点击“编辑映射”按钮。
- 在弹出的窗口里,找到所有datetime类型的列,把目标类型从
smalldatetime改成datetime,保存后继续导出即可。
方法三:用生成脚本替代导出向导
另一种更灵活的跨版本导出方式是使用SSMS的生成脚本功能:
- 右键源数据库(2017)→ 任务 → 生成脚本。
- 在向导里选择要导出的对象(整个数据库或指定表)。
- 进入“设置脚本选项”步骤,点击“高级”按钮:
- 把“脚本数据”设为
True(如果需要导出数据)。 - 把“目标服务器版本”选择为
SQL Server 2014。
- 把“脚本数据”设为
- 生成脚本后,在SQL Server 2014实例上执行脚本,这样datetime列会完全保留原类型,不会被自动转换。
内容的提问来源于stack exchange,提问作者Anonymous




