【问题标题】:Import Excel into SQL - Datetime conversion fail将 Excel 导入 SQL - 日期时间转换失败
【发布时间】:2018-11-27 18:01:21
【问题描述】:

我正在尝试将 excel 导入我的 SQL 数据库,但出现此错误:

消息 错误 0xc0202009:数据流任务 1:SSIS 错误代码 DTS_E_OLEDBERROR。发生 OLE DB 错误。错误代码:0x80004005。 OLE DB 记录可用。来源:“Microsoft OLE DB Provider for SQL Server”Hresult:0x80004005 描述:“从字符串转换日期和/或时间时转换失败。”。 (SQL Server 导入导出向导)

数据库需要这些数据:

    [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
    public DateTime hechosf_periodo { get; set; }

如何存储此数据的示例:

这就是将数据输入 Excel 的方式:

SQL 将 excel 列标识为 datetime,并将尝试将其转换为 datetime2。

我该怎么做才能传递这个错误?

更新:

查看执行后报告后

我看到它正在尝试读取更多的行。我正在尝试删除工作表中每个单元格的内容,但这仍然存在。

【问题讨论】:

  • 使用“YYYY-MM-DD HH:MM:SS.sss”或“YYYMMDD”格式。
  • @JasonA.Long 你好。这是为什么?为什么我们应该使用带有年份的格式?我可以看到数据库中已经有数据,它使用 dd/mm/yyyy 格式。使用其他格式不会搞砸吗?
  • 这是两种通用的、ansi 标准、日期/时间标准格式。第一个是日期时间,第二个是不带时间的日期。无论您使用什么默认排序规则,这两种格式都可以使用。
  • 我已按照建议进行了更改。 (将用图片更新问题)但仍然收到错误消息“从字符串转换日期和/或时间时转换失败。”

标签: sql-server excel import


【解决方案1】:

您应该在流中的 Source 和 Destination 元素之间使用 Derived Column Transformationdescripted here

你看到@[System::StartTime] 变量了吗?你应该添加你的列(从左窗格)而不是这个变量,并从 Type Casts 文件夹中选择适当的类型转换函数(参见右窗格)。请参阅 SSIS 和 SQL 类型之间的映射at this page
它将是 DT_DBTIMESTAMP2DT_DBTIMESTAMP,表达式看起来像 [DT_DBTIMESTAMP]old_column_name。在 Derived Column 中,您需要留下选项“添加新...”,然后您需要命名此新列并在 Destination 元素中使用此新列而不是 excel ”时间”栏目。

【讨论】:

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