在此搜索高低,发现了许多建议,但没有什么对我有用。我们有一个表,其中包含一个字段,用于在文本类型列中存储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),因为这是唯一可行的源数据类型。
答案 0 :(得分:1)
我修复了类似的问题:
描述的方法允许将SQL中的长(超过8K符号)字符串传输到SSIS字符串变量中。