SSIS OLE DB Command数据流转换SqlCommand大小限制

SSIS OLE DB Command data flow transformation SqlCommand size limit

我运行遇到数据流中的一种情况,我认为我达到了 OLE DB 命令数据流转换的 SqlCommand 属性 的大小限制。让我给你设置:

我有一个包含几列的文本文件源。其中一列是包含超过 50,000 个字符的字符串对象。我编写了一个接受这些列的存储过程,包括字符串对象,该对象被解析并添加为 SQL table 中的几个新行。当在 SQL Server Management Studio 中调用存储过程时它工作正常并且我可以传入大量文本 (50k+)。

现在,在我的 SSIS 数据流对象中,我有一个 OLE DB 命令转换,它调用作为参数传入列的存储过程,包括字符串对象(DT_NTEXT 数据类型)。如果包含字符串的文本文件列少于 33,000 个字符,则数据流工作正常。一旦它 运行 进入其中字符串列超过 32,767 个字符大小的行,数据流就会触发 t运行 阳离子错误并且永远不会处理该行。

SQL命令属性 只有 1 行是存储过程调用:

EXEC usp_ParseDataColumns ?,?,?

最后一个参数是可以变得非常大的字符串对象。我假设转换在 运行 时间内用行的数据替换每个参数,如果 属性 的值大小超过 32,767 个字符,它会 t运行cates 并生成错误。

OLE DB 命令转换生成的错误输出是:

The data value cannot be converted for reasons other than sign mismatch or data overflow.

我尝试搜索多种替代方案,包括使用变量,但不确定那是否是正确的路径。我正在使用 OLE DB 命令,因为之后我需要对每一行执行其他转换。

我该如何解决这个问题或者是否有更好的选择?

我从未遇到过 OLEDB 命令被 t运行cated,这很奇怪。请 post 完整的错误。

至于修复,我建议稍微重新构建此数据流。将工作分解为逻辑部分并多次暂存数据。所以,例如,

  • 不使用 OLEDB 命令,而是将数据插入分段 table。
  • 数据流任务完成后,我们执行SQL任务 运行 在游标中存储的过程,或者更好的是,执行一个将 使用暂存数据作为源并执行基于集合的操作。
  • 最后,使用另一个执行SQL任务或另一个数据流来完成 操作(无论在 OLEDB 命令之后发生了什么)

我知道多次插入和读取数据似乎需要更多工作,但这种技术的性能总是优于具有逐行操作的大型复杂数据流。