【问题标题】:Convert date from access to SQL Server with SSIS使用 SSIS 将日期从访问 SQL Server 转换为
【发布时间】:2010-06-15 10:23:12
【问题描述】:

我想使用 SSIS 将数据库从访问转换为 SQL Server。我无法转换访问数据库的日期/时间列。 SSIS 是这样说的:

conversion between DT_Date and DT_DBTIMESTAMP is not supported.

(它是从我的德文翻译过来的,英文版可能会有所不同)。在 Access 中我有日期/时间列,在 SQL Server 中我有日期时间。在 SSIS 的数据流图中,我有一个用于访问数据库的 OLE DB 源、一个 sql server 目标和一个数据转换。在数据转换中,我将列转换为日期 [DT_DATE]。它们是这样连接的:

AccessDB -> conversion -> SQL DB

我做错了什么?如何将 Access 日期列转换为 SQL Server 日期列?

【问题讨论】:

  • sql server 目标出现错误图标

标签: ms-access date ssis


【解决方案1】:

看来您需要添加特定的转换才能将此列转换为正确的类型。您需要转换为 DT_DBTIMESTAMP,而不是 DT_DATE。例如,使用派生列转换,您可以使用如下表达式:

(DT_DBTIMESTAMP)YourDateColumn

【讨论】:

  • 感谢您的回复。当我添加派生列转换并将列转换为 DT_DBTIMESTAMP 时,我收到不支持从 DT_DATE 转换为 DT_DBTIMESTAMP 的错误。
  • 这很奇怪。我通过下载 1999 年的旧 Northwind Access DB 示例,将其转换为 Access 2003,然后使用连接到该 Access MDB 的 OLE DB 源创建一个 SSIS 包,检索 Orders 表(其中包含几个 DT_DATE - 或在 Access称为日期/时间 - 列),将派生列转换附加到 OLEDB 源,我可以毫无问题地转换为 DT_DBDATETIME。您确定之前的转换没有导致此错误(已删除)吗?
  • 是的,我删除了之前的转换。现在我有“AccessDB -> 派生列转换 -> SQL DB”。但错误显示在最后一个框中,即 SQL DB。这可能是问题吗?我使用标准 SQL 在带有 SSIS 的数据库中创建了一个新表,该标准 SQL 在您单击 SQL DB 属性中的新按钮时创建。您为目标数据库使用了哪些数据类型?
  • 这是在我的案例中生成的语句: CREATE TABLE [dbo].[AccessImportTest]( [OrderID] [int] NULL, [EmployeeID] [int] NULL, [OrderDate] [datetime ] NULL, [RequiredDate] [datetime] NULL, [ShippedDate] [datetime] NULL, [ShipVia] [int] NULL, [ShipAddress] [nvarchar](60) NULL, [派生列 1] [datetime] NULL ) ON [ PRIMARY](删除了一些不相关的字段以使其适合注释)最后一个字段是派生列转换添加的字段,因此是 DT_DBTIMESTAMP。其他 3 个日期时间字段是流程中的 DT_DATE(ctd 下一条评论)。
  • 很有趣,我在 SQL DB 的日期时间字段中插入 DT_DATE 列没有任何问题。这是我的数据流:OLE DB Source (connecting to Access) > Derived Column Transformation > OLE DB Destination (connecting to SQL2008) 为了完整起见,这些是连接管理器中提供程序的全名: 来源:Microsoft Office 12.0 Access 数据库引擎 OLE DB 提供程序目标:SQL Server Native Client 10.0
【解决方案2】:

您在源端使用了另一个 Provider。我使用了 JET 提供程序。我在没有安装 Access 的计算机上执行此操作。当我尝试使用 Office 12.0 Access 数据库引擎 OLE DB 提供程序创建数据连接时,我收到一条错误消息,指出工作组信息文件丢失。我在连接测试时收到此消息。

问题是转换是否取决于您用来获取数据的数据库驱动程序。我无法在我正在工作的服务器上安装 Access,所以我无法尝试。这可能是问题的原因吗?

【讨论】:

  • 哎呀,我不能再回答你的评论了......我有版本 10.0.1600.22 而 MS 网站上的 SP1 版本说 10.00.2531.00,所以我想我没有它。
  • 我建议您先安装 SP1,然后再尝试其他任何操作。当问题可能是由几个月前已经解决的错误引起的时,寻找解决方案没有任何意义......此外,ACE驱动程序(较新版本的JET,这是我在我的测试)可免费下载:microsoft.com/downloads/… 还有一个适用于 Office 2010 的版本,它应该是向后兼容的。如果可以的话,我建议尝试一下。应该可以正常工作。
【解决方案3】:

D_Date 列转换为 DT_DBTIMESTAMP 为我解决了同样的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-09
    • 2012-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多