我正在尝试使用SSIS将Excel 2003中的电子表格中的日期列导入SQL Server 2005。我在英国,所以希望日期格式为dd / MM / yyyy。
不幸的是,电子表格中的列包含以dd / MM / yyyy(使用Excel'常规'格式)存储为字符串的日期混合,以及使用Excel'日期'格式dd / MM / yyyy(带语言环境)的日期'英语(英国)')。
这就是它的方式,我不能指望用户能够自己解决这个问题。
查看电子表格时,所有日期在视觉上都显示正确,即dd / MM / yyyy。
我正在尝试将值导入数据库中保存表的varchar列。然后我运行一个存储过程,将这些值复制到包含datetime列的正确表中。
问题是电子表格中存储的日期和使用日期格式的日期会以MM / dd / yyyy的形式导入SQL Server,而存储为字符串的日期会导入为dd / MM / yyyy。我在连接字符串中有IMEX = 1。
在同一个varchar列中使用两种格式的日期显然会在我尝试将其放入日期时间列时导致问题,因此
SET DATEFORMAT MDY;
SET DATEFORMAT DMY;
没用。
有谁知道为什么SSIS包会将Excel电子表格中看似正确的日期导入到SQL Server中,无论如何都是MM / dd / yyyy?
是否有强制SSIS包导入日期为dd / MM / yyyy,这些日期组合作为字符串和应用了日期格式的单元格?
还有其他想法吗?!
非常感谢,
安东尼
答案 0 :(得分:3)
我想你已回答了自己的问题。日期格式化单元格的导入被视为日期,其他格式被视为字符串。可能你的SQL服务器日期设置是MM / dd / yyyy,因此转换。
为什么不尝试在SSIS包中添加数据转换步骤,并将列中的每个转换为单一格式 - datetime或string。然后我确信SQL服务器将以相同的方式处理所有这些。
拉吉
答案 1 :(得分:1)
对我有用的是将IMEX=1
添加到Excel连接字符串。
所以它看起来像这样:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Folder1\Book1.xls;Extended Properties="EXCEL 8.0;HDR=YES;IMEX=1";