【问题标题】:nvarchar(max) causing errorsnvarchar(max) 导致错误
【发布时间】:2017-08-07 02:53:52
【问题描述】:

我正在尝试将数据从 Oracle 源加载到 SQL Server 数据库中。正在加载的列之一是串联的结果。有很多值是 6000 或 7000 个字符长。目标表已设置为nvarchar(max),因此我们不会遇到任何截断问题。

但是,当 SSIS 包运行时,它仍然失败,说结果字符串太长。我已经进入 SSIS 中的高级编辑器,并明确将其更改为 DT_NTEXT unicode textstream。它仍然失败。

请帮忙。

如果没有其他办法,我会将值截断为 4000 个字符。

【问题讨论】:

    标签: sql-server oracle ssis


    【解决方案1】:

    我过去也遇到过同样的问题。不幸的是,由于驱动程序或 SSIS 的内部实现限制,它无法解决。基本上 Oracle 端的限制是 8000 个字符,它对应于 4000 个 Unicode 字符。转换为 unicode 发生在 Oracle -> SQL Server 路径上的某处,无法避免。即使声明两边都是简单的varchar。

    【讨论】:

    • 如何截断 ssis 包中的字符串。有没有办法
    • 最简单的方法是在数据源中 SELECT 的相应列上使用 substr 函数。
    【解决方案2】:

    如果@Milan.Švec 是正确的,那么您只需要跳出框框思考。

    • 你知道 SSIS 很挑剔
    • Oracle 可能没有正确的驱动程序
    • 可以在 (DT_NTEXT) 中读取一个简单的文本/csv 文件

    1) 从 Oracle 将数据推送到 csv 文件。

    2) 确保定义分隔符,以便考虑双引号。

    • 正确的分隔符至关重要
    • 使用分隔符确保您的数据在每列中正确无误。天知道当列被错误地推送到错误的行/列时,脏数据是多么令人沮丧。

    3) 从您的 SSIS 包中,如果需要,从所述 csv 文件读取到临时表。

    • 否则,进入决赛桌并跳过第 4 步。

    4) 运行转换操作以保证您的数据并加载到最终表中。

    当然,还有其他几种方法可以做到这一点,但 csv 是通用的,至少很简单。避免使用 EXCEL 文件,因为它们在某些版本中往往有很多错误。

    【讨论】:

      【解决方案3】:

      我想我找到了答案。 它是oracle中的CLOB函数。如果我没有定义任何 XMLElements,我可以通过 SSIS 绕过 4000 个字符的限制。

      http://www.sqlines.com/oracle/datatypes/clob

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-01-13
        • 2021-06-26
        • 1970-01-01
        • 1970-01-01
        • 2014-04-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多