【问题标题】:SQL Server 2008 R2 import from access fails on datetime columnSQL Server 2008 R2 从访问导入日期时间列失败
【发布时间】:2015-11-05 13:03:57
【问题描述】:

我正在尝试将 Access 2010 DB 表 (*.accdb) 导入 SQL Server 2008 R2, 作为新表而不是现有表。

我是通过 SQL Server 的“导入导出数据向导”来完成的。

我有两个 datetime 列,我知道它们包含一些无效的 datetime 值(不要问我一些天才是如何设法在那里输入错误值的)。

所以我想我可以将这些列映射到向导中的nvarchar(max) 列,稍后再处理问题。

但不幸的是,映射后,我收到此消息:

找到 2 个未知的列类型转换 该包将不会运行。

这是截图:

【问题讨论】:

  • 获取信息 - 通过imgur.com与我们分享图像的推荐方式
  • 数据类型 DateTime 的字段不能包含无效条目。如果您认为是这种情况,请对 Access 数据库进行修复和压缩。
  • @Gustav - 尝试了你的建议 - 不工作。我知道它包含无效数据,因为如果我保留目标类型“日期时间”,它会在导入过程中失败,并出现有关此列的错误
  • 同样,访问日期字段不能包含无效的日期值。但是,与 Access 相比,SQL Server 中的日期范围是有限的(100/01/01 到 9999/12/31),因此请研究您的表中是否存在过多的值。
  • @Gustav - Null 值是否被视为向导的合法值?

标签: sql-server sql-server-2008 datetime sql-server-2008-r2 ms-access-2010


【解决方案1】:

好的,所以我发现了一个非常奇怪的解决方法(向导中的错误?): 当您选择目标列类型为“nvarchar”时,大小会自动设置为“max”,而您不能更改它。

切换到“nchar”(组合框列表中的下一个)并且大小设置为“50”(默认)。 然后切换回“nvarchar”,大小仍然是“50”,按下“下一步”按钮,瞧——我可以选择忽略错误值并能够运行导入。 有史以来最奇怪的解决方法。

【讨论】:

    【解决方案2】:

    除了另一个答案中描述的解决方法之外,另一种方法是导入一个执行 DateTime -> Text 转换的查询,例如,

    SELECT CStr(Field1) AS Field1Text, Field2 FROM Table1
    

    像这样:

    【讨论】:

    • 感谢您的回答。试过你的建议。收到此错误:tinyurl.com/onkc46w
    • 不幸的是,错误消息没有提供太多(任何)有用的信息。也许错误的日期导致查询失败。知道从 Access 本身运行时查询是否也会失败会很有趣。
    • 它不会失败预先说 - 它为很多行返回“#error”,对于其他行它返回日期值作为字符串。编辑:发现返回的一些#error 是由于 Null 值...
    猜你喜欢
    • 2013-09-08
    • 1970-01-01
    • 2013-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-24
    • 1970-01-01
    相关资源
    最近更新 更多