检索具有8000多个字符的单行SSIS结果设置



我在导入之前验证文件上的标头,其中一部分涉及在单个字符串中检索导入表的标题,并由逗号隔开。单字符串结果约为9000个字符。

在SSIS中,将结果集带回 varchar(max( ,但是 varchar(8000( varchar(max( varchar(8000(没有提供完整的结果。我遇到的 varchar(max(错误类似于如果您试图返回完整结果集,但已告诉SSIS,这是em>单行

我在这里有任何选择不涉及分配结果集还是仅检查8000个字符?

不太理想的解决方案:我最终将查询分为两分,一个是第一个8000,第二个用于子字符串(x,8001,x-8000(。它不像我想要的那样优雅,但完成了工作。

将列的数据类型更改为dt_ntext(如果您期望Unicode字符(或DT_TEXT(如果您期望没有Unicode字符(。这些数据类型可以插入SQL中的Nvarchar(Max(和Varchar(Max(字段中。

我最终将查询分为两分,一个是第一个8000,第二个用于子字符串(x,8001,x-8000(。它不像我想要的那样优雅,但完成了工作。

有一个老式的"断开Microsoft工具可以使它们正常工作"解决方案。它是经典的"将其烧成一个物体并解析"。解决方案。

您需要一个额外的system.Object变量在变量中设置(我称此orsult(您要创建和导出的字符串结果,我们将称为Sresult。

在脚本/执行SQL任务中构建字符串,将结果设置设置为完整结果集。然后将Oresult作为"结果集"中的任务的第一个(数字0(输出。标签。

在执行任务主体中,将内部变量设置为nvarchar(max(。然后选择此变量,因为您正常地将数据发送到输出结果集。

发生的事情是Microsoft为需要大量信息(非编程(文本而播放的客户留下的,否则他们将无法使用SSIS。因为它导出到对象(即System.Object中的表(,因此字符串可以是您喜欢的任何长度。剩下的只是让您再次恢复值。

设置一个foreach循环容器,将枚举器设置为ADO枚举器,然后将ADO源对象变量设置为Oresult。这意味着枚举者现在正在读取您上面创建的1线表。在"可变映射"下,将sresult设置为索引0(第一个列值(。

此作业绕过了疯狂的8000字符限制,这意味着您现在可以将其导入另一个任务并将其施放为nvarchar(Max(。

嘿,普雷斯托!它不是很漂亮,但它起作用,并且AFAICT它不使用折旧功能。

最新更新