在此搜索了高和低,并且发现了很多建议,但没有任何对我有用的建议。我们有一个表格,其中包含一个字段,用于将SQL查询存储在文本类型列中,然后查询随后由其他对象调用,因此需要转义某些字符。SSIS 2012截断了执行SQL任务的结果集
我构建了一段SQL代码来做到这一点非常好。问题是,当放入执行SQL任务并将结果分配给String变量时,文本会在表面上随机被截断,例如。最近的尝试将截断的4184个字符截断为4058.
我知道nvarchar在SSIS中限制为4000个字符。一个建议是使用nvarchar(max)源数据类型和Object变量类型。失败并出现此错误:
“将结果抽取到类型变量(DBTYPE_WSTR)”时发生错误。
另一个是在源查询中使用ntext。失败并出现此错误:
“文本,ntext和图像数据类型对于局部变量无效。”
我错过了什么吗?将一个长字符串放入Execute SQL结果集变量的正确方法是什么?
下面是获取SQL命令的原始代码,该代码可以工作但截断。这个ID放在一个转义的单引号中。 (这些特殊的ID是VARCHAR,因为它们可以包含字母。)
DECLARE @IDList VARCHAR(8000)
SELECT @IDList = COALESCE(@IDList + ', ', '') + '''''' + PersonID + ''''''
FROM tmpGroup
select '''SELECT SystemID
FROM People
WHERE PersonID IN (' + @IDList + ')''' AS GroupSQL
注意它使用VARCHAR(8000),因为这似乎工作的唯一来源的数据类型。
我倾向于为此使用存储过程,所以我的执行SQL任务通常只需将参数传递给存储过程。 –
我还没有专门尝试这些想法来解决长度问题,但已使用类似的技术用于其他事情......无论如何,你可以尝试一个数据流从你的数据库中选择,然后放置在一个ODBC Recordset变量(对象),如果你需要稍后在foreach循环中进行递归或其他操作。或者你从源代码到脚本组件,并设置一个字符串变量的值。我不确定是否会遇到或不会遇到数据流源组件文本输入框中的8000个字符限制,如果您转过身并稍后使用该变量。或脚本任务马上变量... – Matt