将Access数据表迁移到SQL Server 2005

时间:2009-04-17 19:57:14

标签: sql-server ms-access datetime types

我使用标准的导入/导出工具将表格带入我的SQL数据库。所有日期都以CHAR类型的形式出现。现在,我不断收到转换错误,指出CHAR到datetime导致超出范围的情况。请帮忙。

3 个答案:

答案 0 :(得分:0)

SQL Server中CHAR(x)类型的字段将用空格填充到其固定长度,例如如果你有CHAR(20)并且你有一个类似“2009-04-20”的日期,该字段将真正包含“2009-04-20”,这可能会在转换为datetime时造成麻烦。

此外,如果您的CHAR字段完全为空,则可能无法转换为有效的日期时间。

解决方案:

a)您可以将列的数据类型更改为VARCHAR(x),从而摆脱最可能不必要的填充:

ALTER TABLE YourTable
  ALTER COLUMN YourColumnName VARCHAR(x) 

b)您可以确保检查空的CHAR(x)字段值,而不是转换它们(或选择那些的默认日期时间值)

c)您可以修剪CHAR(x)字段以删除不必要的填充:

CONVERT(LTRIM(RTRIM(YourFieldName)), ......)

答案 1 :(得分:0)

除了来自marc_s的解决方案,请检查超出范围的值。

这可以解释为什么它升级为char而不是datetime ...你可能有一个日期< 1753

这仅适用于SQL Server 2005及之前的SQL Server 2008 has datetime2

答案 2 :(得分:0)

建议使用SQL Server Migration Assistant(SSMA)而不是MS Access中内置的升迁向导。绝对不那么痛苦。