SQL Server 导入导出向导 - 日期时间错误 - 特定值

Posted

技术标签:

【中文标题】SQL Server 导入导出向导 - 日期时间错误 - 特定值【英文标题】:SQL Server Import Export wizard - error for datetime - specific values 【发布时间】:2012-02-29 14:53:16 【问题描述】:

我正在使用 SQL Server 2008 导入导出向导批量导入文本文件。

文本文件包含超过 90 万条记录,列分隔符为 |,行分隔符/终止符为 LF

一切正常,除了在一种情况下:表中有一列的数据类型为datetime,文本文件中的记录很少,日期为01/07/186109/08/1865 等,并且向导无法导入这些类型的记录给出错误“无效的日期格式”

谁能帮帮我?

感谢和问候, 普拉提克

更新 -

问题仅在于日期值08/08/1696

即使我尝试运行如下简单查询:

select convert(datetime,'08/08/1696', 101) 它给出的错误类似于“将 varchar 数据类型转换为 datetime 数据类型导致值超出范围。”

【问题讨论】:

Lakh = 100,000 对于像我这样无知的人 在平面文件连接管理器中该列定义为什么数据类型? DT_DBDATE、DT_DBTIMESTAMP、DT_DBTIMESTAMP2 等。我现在的猜测是,这不是您选择的 SSIS 日期时间类型的有效范围,但我需要在开始工作后查找类型映射。 映射到DT_DBTIMESTAMP 目标列定义为什么?日期时间,日期时间2,日期? 确实有问题,正如 billinkc 建议的那样。 “08/08/1696”不在 datetime SQL 类型的预期范围内。日期必须介于 '01/01/1753' 和 '31/12/9999' (msdn.microsoft.com/en-us/library/ms187819.aspx) 之间使用 datetime2 代替,从 '01/01/0001' 开始有效 【参考方案1】:

最好的做法是将所有内容导入到一个临时表中,所有列数据类型都为 NVARCHAR 或 VARCHAR。

完成此操作后,您可以轻松地将数据从字符串转换为日期。

http://social.msdn.microsoft.com/Forums/en/transactsql/thread/47fc07d2-37fe-4dd8-b57f-3867cd57e2b0

【讨论】:

很好的答案伙伴。当你回答它时,可能已经坐在你旁边了:) 希望你做得很好【参考方案2】:

我只建议检查源数据库中数据的实际格式。就我而言,我通过将可为空的 datetime2 传递给日期字段来解决问题。这是因为向导没有正确读取源数据库并且它传递了这种错误的格式(源数据库使用 datetime2,而向导传递的是 smalldatetime,从而产生了错误)。

【讨论】:

以上是关于SQL Server 导入导出向导 - 日期时间错误 - 特定值的主要内容,如果未能解决你的问题,请参考以下文章

在sql server中选择进入VS导入导出向导

使用导入导出向导将数据从 Excel 导入 Sql Server 时,如何更改列的默认 varchar 255?

SQL Server 导入和导出向导在使用临时表的存储过程中给出无效对象错误

SQL Server Management Studio -- 工具/导入和导出设置菜单在哪里?

SQL Server2012使用导入和导出向导时,用sql语句作为数据源,出现数据源类型会变成202或者203

SQL Server 2005导入数据时出错,导入的是TXT文本格式