OLE DB命令DT_NTEXT输出类型和XML输入

时间:2019-09-27 11:23:02

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

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

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

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

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

SSIS package

1 个答案:

答案 0 :(得分:1)

在运行了许多实验并在Internet上搜索之后,由于OLE DB Command无法映射到DT_NTEXT列,因此SSIS中似乎是一个问题:

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


更新1

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

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

  

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

     

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

     

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

     

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