【问题标题】:"Invalid date format" when importing flat file with Import Wizard使用导入向导导入平面文件时出现“无效的日期格式”
【发布时间】:2013-02-01 16:15:44
【问题描述】:

下午好,

我有一个我无法弄清楚的两难境地。我正在尝试在 SQL 数据库表中导入平面文件,但遇到了问题。我在 SQL 中的列是出生日期 DOB 的日期时间列。提供给我的提取平面文件将此列作为日期...因此当我导入 SQL 时,我得到:

Messages
Error 0xc0202009: Data Flow Task 1: SSIS Error Code DTS_E_OLEDBERROR.  An OLE DB error has occurred. Error code: 0x80004005.
An OLE DB record is available.  Source: "Microsoft SQL Server Native Client 10.0"  Hresult: 0x80004005  Description: "Invalid date format".
 (SQL Server Import and Export Wizard)

Error 0xc020901c: Data Flow Task 1: There was an error with input column "DOB" (212) on input "Destination Input" (147). The column status returned was: "Conversion failed because the data value overflowed the specified type.".
 (SQL Server Import and Export Wizard)

Error 0xc0209029: Data Flow Task 1: SSIS Error Code DTS_E_INDUCEDTRANSFORMFAILUREONERROR.  The "input "Destination Input" (147)" failed because error code 0xC020907A occurred, and the error row disposition on "input "Destination Input" (147)" specifies failure on error. An error occurred on the specified object of the specified component.  There may be error messages posted before this with more information about the failure.
 (SQL Server Import and Export Wizard)

我试图弄清楚如何在平面文件中的每个 DOB 中添加一个随机时间,例如 00:00:00.000。例如,他们发送给我 1983-11-30 但我想使用 1983-11-30 00:00:00.000

有没有办法做到这一点,或者有人知道我能做什么吗?提前致谢

【问题讨论】:

  • 这不应该是一个问题(至少,不是你想的那个)。 DATETIME 列将自动假定时间为 00:00:00.000,而它只接收日期。这里最可能的问题是日期格式,SQL Server 可能假设您的日期格式是 YYYY-DD-MM 而不是 YYYY-MM-DD
  • 在运行批量插入之前尝试执行SET DATEFORMAT ymd
  • 谢谢您....我认为我的问题在其他地方...我只运行了一次,格式保持不变,并且假设为 0,就像您想的那样。谢谢

标签: sql sql-server import


【解决方案1】:

MSSQL 将像您这样的yyyy-MM-dd 字符串转换为日期没有问题。你最终会自动得到00:00:00.000。您发布的错误消息“转换失败,因为数据值溢出了指定的类型”表明其中一个日期超出了有效范围。您很可能得到了无效的出生日期(查找 0000-00-00 记录或类似记录)。如果平面文件以 Excel 可以轻松解析的方式进行分隔,请将其拉​​入 Excel 并对该列进行排序。查看最小值和最大值,您可能会找到违规记录。

【讨论】:

  • 谢谢....现在就这样做。我很感激。我确实找到了 151 次您所说的内容。它仍然在发生,所以我确信那里还有其他东西。我现在将文件从服务器带到我的计算机,因为服务器没有 excel。其中有 160 万行
【解决方案2】:

我的情况有点不同,但我觉得发帖可以帮助其他人。与 OP 不同,我将 Access 2000 mde 文件中的数据导入 sql server management studio,但与 OP 类似,我遇到了“无效数据格式”错误。我知道冲突是由于访问文件中DateTime类型的列与sql中的DataTime格式冲突造成的。

解决方案: 在我完成导入数据过程后,通过在 sql server management studio -> 任务 -> 导入数据中右键单击服务器名称,然后选择源(访问)来完成,目标(sql server)和要导入的表,我注意到由于类型问题而传输了0行。但是,在 SQL Server Management Studio 中为我创建了一个表,该表表示我试图从访问表中导入的表。它具有正确的列及其关联的数据类型。

所以我所做的是我右键单击表格以进入设计视图并将DataTime 列的所有数据类型更改为Date

然后我重新做了导入数据的过程,成功传输了行。

【讨论】:

    【解决方案3】:

    这是旧的,但我在我的 SSIS 数据流任务中遇到了类似的问题,希望这可能对某人有所帮助:对我来说,解决方案是检查“将源中的空值保留为数据流中的空值”平面文件源编辑器窗口中的选项(在连接管理器页面中)

    【讨论】:

      【解决方案4】:

      我发现在将数据库从本地 EXPRESS 复制到我的生产服务器时,表定义是 smalldatetime 而不是 datetime。在您选择表的向导中,您可以选择编辑映射。在那里你可以改变你的数据类型。

      【讨论】:

        【解决方案5】:

        我在通过向导导入数据时将行的类型从 datetime 更改为 date(在映射中),它对我有用。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-06-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多