类型的值被分配到变量“用户:: de_sters”从当前的变量类型不同(The type of th

2019-08-20 22:06发布

我有一个可变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.

任何帮助,或提示?

Answer 1:

问题是SSIS不明白varchar(max)的。你需要指定一个数据类型limit 。只是改变max价值8000

declare @s varchar(8000) = '' 

如果你的字符串是非常大的,然后使用FullResultSet用varchar(max)的您的查询和值存储在其数据类型是可变的object

现在为了访问该对象使用Script taskScript 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());
     }


Answer 2:

要加载varchar(max)内场SQL Script TasksControl 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