Sql server SQL执行任务中的SSIS变量表达式设置不正确
我有一个SSIS包,其中运行SQL执行任务以获取一些记录,然后运行foreach循环,迭代返回的ADO对象并设置几个变量值 这些变量用于数据流任务查询。我需要为变量设置表达式 在行中,我的值类似于Sql server SQL执行任务中的SSIS变量表达式设置不正确,sql-server,variables,ssis,expression,etl,Sql Server,Variables,Ssis,Expression,Etl,我有一个SSIS包,其中运行SQL执行任务以获取一些记录,然后运行foreach循环,迭代返回的ADO对象并设置几个变量值 这些变量用于数据流任务查询。我需要为变量设置表达式 在行中,我的值类似于“foo”+@[User::Bar]+“baz”(我直接使用这个表达式设置它,它可以工作。我想从sql输出设置它) 但是,当我从SQL任务到变量表达式中得到这个值时,SSIS正在转义引号,我不想为了我的任务工作而转义引号 保存值:“foo”+@[User::Bar]+“baz” 变量集:\'foo\'+
“foo”+@[User::Bar]+“baz”
(我直接使用这个表达式设置它,它可以工作。我想从sql输出设置它)
但是,当我从SQL任务到变量表达式中得到这个值时,SSIS正在转义引号,我不想为了我的任务工作而转义引号
保存值:“foo”+@[User::Bar]+“baz”
变量集:\'foo\'+@[User::Bar]+\'baz\'
有人能帮我吗。我想要保存的表达式,由于此强制转义,我的查询设置不正确。使用SSIS表达式删除转义字符
如果以下值存储在变量中(例如@[User::Var1]
:
\“foo\”+@[User::Bar]+\“baz”
使用以下表达式添加表达式任务:
@[User::Var1] = REPLACE(@[User::Var1],"\\","")
REPLACE(@[User::Var1],"\\","")
或使用以下表达式创建新变量:
@[User::Var1] = REPLACE(@[User::Var1],"\\","")
REPLACE(@[User::Var1],"\\","")
实验
我创建了一个字符串类型的变量@[User::variable]
,其值如下:
\"foo\" + @[User::Bar] + \"baz\"
REPLACE( @[User::Variable],"\\","")
然后,我创建了另一个字符串类型的变量@[User::Variable1]
,其表达式为:
\"foo\" + @[User::Bar] + \"baz\"
REPLACE( @[User::Variable],"\\","")
值转义字符消失:
更新1-将值转换为表达式
由于您希望将以下值\“foo\”+@[User::Bar]+\“baz\”
视为一个表达式而不是一个固定值。使用SSIS表达式无法实现这一点。您必须将此值作为表达式分配给另一个变量,如下所述:
我在包中添加了3个变量:Bar
、Var1
和VarResult
我添加了一个脚本任务,并选择Var1
作为只读变量,选择VarResult
作为ReadWriteVariable:
在脚本中,在删除转义字符后,我使用以下代码将Var1
的值作为表达式赋给VarResult
:
public void Main()
{
字符串Var1=Dts.Variables[“Var1”].Value.ToString();
变量[“VarResult”].Expression=Var1.Replace(“\\”,”);
Dts.Variables[“VarResult”].EvaluatesExpression=true;
Dts.TaskResult=(int)ScriptResults.Success;
}
结果
提供的答案解决问题了吗?还没有尝试,将在明天更新Ope…它没有解决我的问题…它确实删除了初始设置值的斜杠,但在运行时没有…还要注意,我想使用它设置表达式,而不是值…我的意思是如果@[User:Bar]正在输入值这对我没有用处…我希望在表达式中使用Bar变量值来获取value@ChaitanyaGadkari如果字符串
@[User::Bar]
存储为变量值,则无法将其转换为此变量值,因为它未在表达式中使用。您需要使用脚本任务来实现这一点。我将在稍后提供答案,然后让您know@ChaitanyaGadkari我更新了我的答案,看看吧