SSIS 2012截断执行SQL任务

时间:2016-08-19 20:56:23

标签: sql sql-server ssis sql-server-2012 etl

在此搜索高低,发现了许多建议,但没有什么对我有用。我们有一个表,其中包含一个字段,用于在文本类型列中存储SQL查询,随后该查询将由其他对象调用,因此需要转义某些字符。

我构建了一段SQL代码来完成这项工作。问题是,当放入执行SQL任务并将结果分配给String变量时,文本会在看似随机的情况下被截断,例如。最近的尝试将4184个字符截断为4058.

我知道在SSIS中nvarchar限制为4000个字符。一个建议是使用nvarchar(max)源数据类型和Object变量类型。这失败了这个错误:

“将结果提取到类型变量(DBTYPE_WSTR)时发生错误”。

另一个是在源查询中使用ntext。这失败了这个错误:

“text,ntext和image数据类型对局部变量无效。”

我错过了什么吗?将长字符串放入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),因为这是唯一可行的源数据类型。

1 个答案:

答案 0 :(得分:1)

我修复了类似的问题:

  1. 在执行SQL任务中 - 设置 ResultSet =完整结果集并将对象变量(VObj)指定为结果集。
  2. 完成此任务后 - 创建Foreach ADO枚举器并将Vobj作为源变量(see good walk through article)处理,将第一个变量分配给某个String变量。
  3. 描述的方法允许将SQL中的长(超过8K符号)字符串传输到SSIS字符串变量中。