【问题标题】:SQLBulkCopy can't convert Time to DateTimeSQLBulkCopy 无法将时间转换为日期时间
【发布时间】:2011-03-20 21:10:05
【问题描述】:

我正在编写一个小实用程序来将数据库从专有 ODBC 数据库复制到 SQL Server 数据库中。一切都很好,除非我使用 SQLBulkCopy 复制数据。它在大多数情况下都有效,但在尝试将 TIME 字段复制到 SQL DATETIME 时无效。我收到此错误:

数据源中TimeSpan类型的给定值无法转换为指定目标列的日期时间类型。

当我在 SQL Server 中创建架构时,我必须在 SQL Server 中创建 DATE 和 TIME 字段 DATETIME 类型,所以没有办法解决这个问题。我想使用 SQLBulkCopy,因此我不必手动读取每个表中的每条记录并围绕特殊情况包装逻辑。在我走这条路之前,还有其他方法可以做到这一点吗?我完全无法控制源数据库架构或内容。

【问题讨论】:

    标签: sql-server sql-server-2000 odbc sql-types sqldatetime


    【解决方案1】:

    我假设您正在处理 SQL Server 2008 之前的版本。SQL Server 2008 具有 DATE 和 TIME 数据类型。

    我认为您必须使用与 SQL Server 架构匹配的 DataTable 并从源阅读器加载它,通过添加日期信息(例如 1/1/1900)适当地将任何 TIME 更改为 DATETIME。然后使用 WriteToServer(DataTable)。您可能希望分批执行此操作,因为您可能会使用大量内存将其全部读取到 DataTable 中。

    您不能使用 SSIS 的任何特殊原因?

    【讨论】:

    • 这几乎证实了我的想法。我希望有一根魔杖,但我想不是。是的,它是 SQL Server 2000。我不能使用 SSIS,因为 ODBC 驱动程序不支持远程连接,并且 ODBC 数据库位于网络上的另一台机器上,除非我可以从非 SQL Server 机器反向使用 SSIS读取 ODBC 并导出到远程 SQL Server。
    • SSIS 在外部进程(SQL Server 2005 及更高版本)中运行。您可以阅读几乎任何内容,也可以阅读任何内容。你可以把脚本任务和转换来改变数据类型和一切。添加 SSIS 可以管理缓冲区(并且您可以调整它们以提高性能)。它随 SQL Server 标准版一起提供,但实际上并不是引擎的一部分。
    猜你喜欢
    • 2019-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-20
    • 1970-01-01
    • 2020-02-27
    • 1970-01-01
    相关资源
    最近更新 更多