来自 SQL 执行任务的 SSIS 变量表达式设置不正确
SSIS variable expression from SQL Execution task incorrectly set
我有一个 SSIS 包,我在其中 运行 一个 SQL 执行任务来获取一些记录,然后我 运行 一个 foreach 循环遍历返回的 ADO 对象并设置一些变量值。
这些变量用于数据流任务查询。我需要为变量设置表达式。
在行中我有类似于 "foo" + @[User::Bar] + "baz"
的值(我直接使用这个表达式设置它,它有效。我想从 sql 输出设置它)
但是当我从 SQL 任务获取这个值到变量表达式时,SSIS 正在转义引号,我不想为了我的任务而转义这些引号。
Saved Value : "foo" + @[User::Bar] + "baz"
Variable set : \"foo\" + @[User::Bar] + \"baz\"
谁能帮我解决这个问题。我想要保存的表达式,由于这种强制转义,我的查询设置不正确。
正在使用 SSIS 表达式删除转义字符
如果以下值存储在变量中(示例 @[User::Var1]
:
\"foo\" + @[User::Bar] + \"baz\"
使用以下表达式添加表达式任务:
@[User::Var1] = REPLACE(@[User::Var1],"\","")
或者用下面的表达式创建一个新变量:
REPLACE(@[User::Var1],"\","")
实验
我创建了一个字符串类型的变量 @[User::Variable]
,具有以下 值:
\"foo\" + @[User::Bar] + \"baz\"
然后我使用以下 表达式:
创建了另一个字符串类型的变量 @[User::Variable1]
REPLACE( @[User::Variable],"\","")
值转义字符消失了:
更新 1 - 将值转换为表达式
因为您希望将以下值 \"foo\" + @[User::Bar] + \"baz\"
视为表达式而不是固定值。您无法使用 SSIS 表达式实现该目的。您必须将此值作为表达式分配给另一个变量,如下所述:
我在包中添加了 3 个变量:Bar
、Var1
和 VarResult
我添加了脚本任务并选择 Var1
作为只读变量,选择 VarResult
作为 ReadWriteVariable:
在脚本中,我使用以下代码在删除转义字符后将 Var1
的值作为表达式分配给 VarResult
:
public void Main()
{
string Var1 = Dts.Variables["Var1"].Value.ToString();
Dts.Variables["VarResult"].Expression = Var1.Replace("\", "");
Dts.Variables["VarResult"].EvaluateAsExpression = true;
Dts.TaskResult = (int)ScriptResults.Success;
}
结果
我有一个 SSIS 包,我在其中 运行 一个 SQL 执行任务来获取一些记录,然后我 运行 一个 foreach 循环遍历返回的 ADO 对象并设置一些变量值。
这些变量用于数据流任务查询。我需要为变量设置表达式。
在行中我有类似于 "foo" + @[User::Bar] + "baz"
的值(我直接使用这个表达式设置它,它有效。我想从 sql 输出设置它)
但是当我从 SQL 任务获取这个值到变量表达式时,SSIS 正在转义引号,我不想为了我的任务而转义这些引号。
Saved Value : "foo" + @[User::Bar] + "baz"
Variable set : \"foo\" + @[User::Bar] + \"baz\"
谁能帮我解决这个问题。我想要保存的表达式,由于这种强制转义,我的查询设置不正确。
正在使用 SSIS 表达式删除转义字符
如果以下值存储在变量中(示例 @[User::Var1]
:
\"foo\" + @[User::Bar] + \"baz\"
使用以下表达式添加表达式任务:
@[User::Var1] = REPLACE(@[User::Var1],"\","")
或者用下面的表达式创建一个新变量:
REPLACE(@[User::Var1],"\","")
实验
我创建了一个字符串类型的变量 @[User::Variable]
,具有以下 值:
\"foo\" + @[User::Bar] + \"baz\"
然后我使用以下 表达式:
创建了另一个字符串类型的变量@[User::Variable1]
REPLACE( @[User::Variable],"\","")
值转义字符消失了:
更新 1 - 将值转换为表达式
因为您希望将以下值 \"foo\" + @[User::Bar] + \"baz\"
视为表达式而不是固定值。您无法使用 SSIS 表达式实现该目的。您必须将此值作为表达式分配给另一个变量,如下所述:
我在包中添加了 3 个变量:Bar
、Var1
和 VarResult
我添加了脚本任务并选择 Var1
作为只读变量,选择 VarResult
作为 ReadWriteVariable:
在脚本中,我使用以下代码在删除转义字符后将 Var1
的值作为表达式分配给 VarResult
:
public void Main()
{
string Var1 = Dts.Variables["Var1"].Value.ToString();
Dts.Variables["VarResult"].Expression = Var1.Replace("\", "");
Dts.Variables["VarResult"].EvaluateAsExpression = true;
Dts.TaskResult = (int)ScriptResults.Success;
}
结果