3

我正在处理如下图所示的 SSIS 数据流。以下是流程的详细信息。

  1. 获取一些记录。
  2. 添加一个 DT_NTEXT 类型的虚拟列
  3. 这是一个执行存储过程的 OLE DB 命令。存储过程的输出是 XML,但类型为 NVARCHAR(MAX)。输出正在填充虚拟字段。
  4. 将虚拟列中的 XML 写入表。

执行包时,目标数据库仅填充 < 而不是完整的 XML。如果我将虚拟列更改为 WSTR 类型,则 XML 会成功完整地写入表中。我需要将 XML 写入 NVARCHAR(MAX) 字段,因为 XML 可能很大并且超出 WSTR 类型的限制。

有谁知道发生了什么以及如何将我的 XML 写入 NVARCHAR(MAX) 字段?

SSIS 包

4

1 回答 1

1

在运行了许多实验并在互联网上搜索之后,看起来这是 SSIS 中的一个问题,因为 OLE DB 命令无法映射到DT_NTEXT列:

作为一种解决方法,您可以使用脚本组件通过参数化 SQLCommand 获取 XML 值,并将输出映射到输出列(无需使用派生列转换创建列)。


更新 1

在搜索时,我发现这是 Microsoft 论坛中的一个未解决问题:

Microsoft 支持团队提供了以下反馈:

OLE DB 客户端处理 XML 列(不是 OLE DB 规范的一部分,而是特定于 SQL),就像它们处理 NTEXT 字段一样。SQL 任务的 OLE DB 提供程序当前不完全支持 LOB 字段'如果将结果存储在 Object 变量中,它将返回指向数据流的 COM 对象,但不返回实际结果(这不是很有用)。

有几个解决此问题的方法。

1) 将结果转换为 varchar,并使用字符串变量
2) 使用 ADO.NET 连接而不是 OLE DB

考虑到更改/修复当前行为所涉及的工作量以及可用的解决方法,我们决定不在此版本中修复此问题。

于 2019-09-29T18:51:04.877 回答