我遇到了数据流中的情况,我认为我已达到OLE DB命令数据流转换的SqlCommand属性的大小限制。让我给你一个设置:
我有一个包含几列的文本文件源。其中一列是一个超过50,000个字符的字符串对象。我编写了一个接受这些列的存储过程,包括在SQL表中解析并添加为几个新行的字符串对象。当在SQL Server Management Studio中调用存储过程并且我可以传入大量文本(50k +)时,它工作正常。
现在在SSIS中的数据流对象中,我有一个OLE DB命令转换,它调用作为参数传递列中的存储过程,包括字符串对象(DT_NTEXT数据类型)。如果包含该字符串的文本文件列少于33,000个字符,则数据流可正常工作。一旦它遇到一个字符串列大小超过32,767个字符的行,数据流就会触发截断错误,并且永远不会处理该行。
SQLCommand属性只有1行,即存储的proc调用:
EXEC usp_ParseDataColumns ?,?,?
最后一个参数是字符串对象,它可以变得非常大。我假设转换在运行时用行的数据替换每个参数,如果属性的值大小超过32,767个字符,它会截断并生成错误。
OLE DB命令转换生成的错误输出是:
由于符号以外的原因,无法转换数据值 不匹配或数据溢出。
我尝试搜索几种替代方案,包括使用变量,但不确定这是否是正确的路径。我正在使用OLE DB命令,因为我需要在每一行之后执行其他转换。
我如何解决这个问题还是有更好的选择?
答案 0 :(得分:1)
我从未遇到OLEDB命令被截断,这是一个奇怪的命令。请尽可能发布完整的错误。
至于修复,我建议稍微重新构建这个数据流。将工作分解为逻辑部分并多次分阶段处理数据。所以,例如,
我知道这似乎是多次插入和读取数据的工作,但这种技术总是比逐行操作的大型复杂数据流更好。