分配给变量的值的类型与当前变量类型不同

时间:2015-08-14 12:01:57

标签: sql-server-2008 ssis ssis-2008

我的SSIS包失败并显示错误:

  

分配给变量的值的类型不同于   当前变量类型。

我声明了一个类型为string的变量,SQL表中对应的列名是varchar(33)。如果我使用数据类型作为对象它成功但我再次需要在连接字符串的表达式中使用变量值,并且不支持对象类型。

请帮我解决。

注意:我的SSIS包的目标是从表中获取服务器列表(它失败的地方)并在所有服务器中使用foreach循环容器执行一些脚本。

3 个答案:

答案 0 :(得分:2)

如果我正确地阅读您的问题,您实际需要的是两个变量:一个是从SQL表接收数据的Object变量,另一个是您将传递给ForEach循环的String值。

它们之间的区别在于您的Object变量可以容纳多行,而您的String值一次只能容纳一个项目。你要做的是声明一个Object变量,用一个服务器列表填充它,然后使用ForEach循环遍历列表中的每个项目,一次一个地将值提供给String变量。然后,您将使用String变量来设置您提到的脚本,并在每个服务器上执行一次。

为了进一步阅读,有一个很棒的演练here,它将为您提供我正在谈论的截图和示例。

答案 1 :(得分:1)

我知道我很晚才回复这个帖子,下面的解释是为了将来看到这个的人。 我最近遇到过这种情况。我做了以下

首先是对象类型的记录集目标变量。使用For Each Loop容器,我将每个行数据(具有多个列)映射到OBJECT类型的变量。当我使用除OBJECT数据类型以外的任何其他数据类型的变量时,我得到如下错误

Error: ForEach Variable Mapping number 3 to variable "User::EMPID" cannot be applied. 

然后我在执行SQL任务中使用了对象类型的变量,它成功插入数据而没有任何错误。

  

Thumb Rule:将记录集的目标输出映射到变量   对象类型。

答案 2 :(得分:0)

我最近遇到过这种情况。我做了以下

首先是对象类型的记录集目标变量。 使用For Each Loop容器,我将每个行数据(具有多个列)映射到OBJECT类型的变量。当我使用除OBJECT数据类型以外的任何其他数据类型的变量时,我得到如下错误

Error: ForEach Variable Mapping number 3 to variable "User::EMPID" cannot be applied. 

然后我在执行SQL任务中使用了对象类型的变量,它成功插入数据而没有任何错误。

Thumb规则:将记录集目标输出映射到OBJECT类型的变量。