我有一个可变de_sters
,字符串型变量,因为它是在我的SSIS包中定义的,它的范围是SSIS包,我需要fill
与从一个表中的多个行的值,USIG一个Execute Sql Task
包。
底线是,我有一个“执行SQL任务”包,礼仪 - >“SQL语句”我曾经写道:
declare @s varchar(max) = ''
select @s = case when @s <> ''
then @s + ',''' + employer_name + ''''
else @s + '''' + employer_name+ ''''
end
from employers
select @s as Result
然后,在Result Set
,我选择Single Row
(第一我已经跑了我的选择,我看到它返回只有一行)。 然后在标签Result Set
(左侧),我写了Result Name
字段Result
(从我前面的SQL语句的别名),并在申请Variable Name
我写User::de_sters
。
但是,当我运行SQL任务它给了我
The type of the value being assigned to variable "User::de_sters"
differs from the current variable type" error.
任何帮助,或提示?
问题是SSIS不明白varchar(max)
的。你需要指定一个数据类型limit
。只是改变max
价值8000
。
declare @s varchar(8000) = ''
如果你的字符串是非常大的,然后使用FullResultSet用varchar(max)
的您的查询和值存储在其数据类型是可变的object
。
现在为了访问该对象使用Script task
或Script component
(数据流)和写下面的代码,以提取从值object
变量
OleDbDataAdapter oleDA = new OleDbDataAdapter();
DataTable dt = new DataTable();
oleDA.Fill(dt, Dts.Variables["User::YourVariable"].Value);
foreach (DataRow rowLoop in dt.Rows)
{
MessageBox.Show (rowLoop[0].ToString());
}
要加载varchar(max)
内场SQL Script Tasks
在Control flow
给一个字符串变量,你应该把它分割到更小的块如。 varchar(4000)
并将它们加载到一个object
,并在下一个步骤中添加foreach loop container
至回结合到一个string
变量,
一个大的文本拆分为较小的文本,你可以使用下面的存储过程行:
CREATE PROCEDURE SSIS_VarcharMax_Loader
@Input varchar(max) ,
@maxRowLength int = 50
AS
BEGIN
SET NOCOUNT ON
;WITH
tmp(inp,c,rn) as (
select @Input,SUBSTRING(@Input, 1,@maxRowLength),@maxRowLength
union all
select @Input,SUBSTRING(@Input,rn,@maxRowLength),rn + @maxRowLength
from tmp
where rn < len(@Input)
)
select c from tmp
OPTION (MAXRECURSION 500);
END;
然后添加以下表达式中通过在各行一个foreach容器包含在表达任务和Concat的他们回到一个串,
@strResult = (ISNULL(@[User::strResult])?"": @[User::strResult] )+ @[User::str]
文章来源: The type of the value being assigned to variable “User::de_sters” differs from the current variable type