【问题标题】:Migrating an Access data table to SQL Server 2005将 Access 数据表迁移到 SQL Server 2005
【发布时间】:2009-04-17 19:57:13
【问题描述】:

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

【问题讨论】:

    标签: sql-server ms-access datetime types


    【解决方案1】:

    与 marc_s 的解决方案一样,检查超出范围的值。

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

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

    【讨论】:

    • SQL Server 升迁是揭示日期字段中数据输入错误的好方法,其中 2000 年被输入为 200 年等等。从那时起,我一直在使用需要 4 位数字的输入掩码,尽管我有点讨厌输入掩码(用户似乎不像我那样讨厌它们)。
    • @David W. Fenton:当以 Access 数据库引擎为目标时,我相信您在列上有一个 CHECK 约束或验证规则来进行一些合理的日期范围检查。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      解决方案:

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

      ALTER TABLE YourTable
        ALTER COLUMN YourColumnName VARCHAR(x) 
      

      b) 您可以确保检查空 CHAR(x) 字段值并且不转换这些值(或为这些值选择默认日期时间值)

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多