我有一个变量de_sters,一个字符串类型变量,因为它在我的SSIS包中定义,它的范围是SSIS包,我需要fill使用一个表中的几行的值,使用Execute Sql Task包.
底线是我有一个"执行Sql任务"包,在proprieties - >"Sql Statement"我写道:
declare @s varchar(max) = ''
select @s = case when @s <> ''
then @s + ',''' + employer_name + ''''
else @s + '''' + employer_name+ ''''
end
from employers
select @s as Result
Run Code Online (Sandbox Code Playgroud)
然后,在Result Set我选择Single Row(首先我运行我的选择,我看到它只返回一行).然后在tab 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 …Run Code Online (Sandbox Code Playgroud) 我试图从SQL Server的表中获取CSV ID并将结果分配给变量.下面是我在执行SQL任务中放入的sql
set nocount on
declare @csv varchar(max) = ''
select @csv = @csv + cast(companyid as varchar(10)) + ',' from company where isprocessed = 0
select substring(@csv,1,len(@csv) - 1) as companyids
Run Code Online (Sandbox Code Playgroud)
正如您可以看到它在t-sql中获取字段的csv的简单而标准的方法.它在查询窗口中完美运行,但在我在SSIS 2012中运行任务时抛出以下错误
[执行SQL任务]错误:值类型(__ComObject)只能转换为Object类型的变量.
[执行SQL任务]错误:为变量"sCSVCompanyIds"赋值时发生错误:"分配给变量"User :: sCSVCompanyIds"的值(DBNull)的类型与当前变量类型(String)不同.在执行期间可能不会改变类型.变量类型是严格的,除了Object类型的变量."
以下是执行SQL任务的设置
csvids为选择列表中的别名列名称),并将"变量名称"设置为User::sCSVCompanyIds我不知道为什么它不起作用.在浪费了这么多时间之后,我通过将结果作为Full Row集返回(同样的SQL总是返回1行1列)并为每个循环容器添加一个循环抛出结果集(将始终迭代)只有一次出于显而易见的原因)并将结果集的字段分配给变量.它适用于我,但应该有简单的方法.我错过了什么?