Sql server SQL执行任务中的SSIS变量表达式设置不正确

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\'+

我有一个SSIS包,其中运行SQL执行任务以获取一些记录,然后运行foreach循环,迭代返回的ADO对象并设置几个变量值

这些变量用于数据流任务查询。我需要为变量设置表达式

在行中,我的值类似于
“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我更新了我的答案,看看吧