使用执行SQL任务进行参数映射

时间:2017-06-09 17:15:06

标签: sql sql-server ssis etl temp-tables

我正在尝试创建一个临时表,并将数据插入到foreach循环容器内的执行SQL任务中的临时表中。

以下是sql任务

IF OBJECT_ID('TEMPDB.DBO.#TEMP') IS NOT NULL
DROP TABLE #TEMP
GO

CREATE TABLE #TEMP 
      ( ... );

INSERT INTO #TEMP
      SELECT (...)
  FROM table t1 INNER JOIN table2 t2
  ON t1.id = t2.table1_id
WHERE t1.value = ?

我想在WHERE子句中有一个参数,但每当我尝试添加它时,我都会收到此错误。

“多步OLE DB操作生成错误。检查每个OLE DB状态值,如果可用。没有工作。”。可能的失败原因:查询问题,“ResultSet”属性设置不正确,参数设置不正确或连接未正确建立。“

当我在Where子句中对值进行硬编码时,插件可以完美地工作。

我的参数映射出错了什么?

以下是我的参数映射设置 enter image description here

此外,我无法使用存储过程。

2 个答案:

答案 0 :(得分:1)

只需转到Expressions标签,如屏幕截图您提供的所示,并将以下表达式写入SqlStatmentSource属性

"IF OBJECT_ID('TEMPDB.DBO.#TEMP') IS NOT NULL
DROP TABLE #TEMP
GO

CREATE TABLE #TEMP 
      ( ... );

INSERT INTO #TEMP
      SELECT (...)
  FROM table t1 INNER JOIN table2 t2
  ON t1.id = t2.table1_id
WHERE t1.value = '"  +  @[User::Where_Variable]  +   "'"

enter image description here

答案 1 :(得分:0)

使用整个SQL脚本填充变量,并在执行SQL任务中将该变量用作SQLSourceType。