【问题标题】:SSIS:Unicode data is odd byte size for a column Should be even byte sizeSSIS:Unicode数据是列的奇数字节大小应该是偶数字节大小
【发布时间】:2018-07-23 20:37:50
【问题描述】:

我正在运行一个 SSIS 包,它将数据从一个 SQL Server 拉到另一个 SQL Server。源表和目标表具有相同的架构。其中一列是 nvarchar(max) 数据类型。当我尝试插入数据时 - 它给我 nvarchar(max) 类型列的以下错误 -

错误:SSIS 错误代码 DTS_E_OLEDBERROR。发生 OLE DB 错误。错误代码:0x80004005。 OLE DB 记录可用。来源:“Microsoft SQL Server Native Client 11.0”Hresult:0x80004005 描述:“Unicode 数据是第 13 列的奇数字节大小。应该是偶数字节大小。”。

有人可以帮我解决这个问题吗?

【问题讨论】:

  • 这是一个已知的错误,使用Nvarchar Max 会出现此错误,请尝试使用固定长度而不是Navarchar Max 或使用整数类型
  • 使用派生列表达式并将其更改为固定长度,而不是更改源和目​​标中的数据类型。
  • @BHouse 感谢您的更新。我创建了一个派生列并且它有效!

标签: sql-server ssis etl


【解决方案1】:

尝试使用以下表达式添加派生列并将其映射到目标列

(DT_WSTR,4000)[column name]

否则,请查看以下包含有用信息的文章:

【讨论】:

    【解决方案2】:

    NVarchar 存储 16bit =2byte 字符。

    NVarchar 列的大小以字节为单位指定。

    因此,如果您需要在 NVarchar 列中存储 13 个字符数据,则需要将其大小设置为 26。

    这允许您存储来自世界各地的常用字符。

    【讨论】:

    • 我认为,值 13 指的是列 ID 13。不是字节。
    • 我同意。我应该用一个更好的例子来说明尺寸。尝试使用可被 2 整除的大指定大小,而不是“最大值”。
    • @RameshwarPawale 你试过我的建议了吗?如果您不想使用这种方法,请尝试使用派生列,检查我提供的链接,它包含有用的信息
    猜你喜欢
    • 2016-12-23
    • 2011-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-10
    • 1970-01-01
    相关资源
    最近更新 更多