【问题标题】:OLE DB Command DT_NTEXT Output Type and XML inputOLE DB 命令 DT_NTEXT 输出类型和 XML 输入
【发布时间】:2019-09-27 11:23:02
【问题描述】:

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

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

当包被执行时,目标数据库只被填充一个

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

【问题讨论】:

  • 只是为了划掉显而易见的事实 - Get Records 从不同于 Get XML 的服务器获取数据,是吗?
  • 嗨 Billnkc,同一台服务器,不同的数据库。我想我知道你在想什么。让存储过程写入记录。这不是一个坏主意。谢谢。但是,我也在寻找写入 dt-ntext 类型问题的技术原因。

标签: sql-server stored-procedures ssis parameters etl


【解决方案1】:

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

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


更新 1

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

Microsoft 支持团队给出了以下反馈:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2019-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-27
    相关资源
    最近更新 更多