【问题标题】:Parameter Mapping using an Execute SQL Task使用执行 SQL 任务的参数映射
【发布时间】:2017-06-09 17:15:05
【问题描述】:

我正在尝试创建一个临时表并将数据插入到 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 子句中的值进行硬编码时,插入效果很好。

我在参数映射上做错了什么?

这是我的参数映射设置

我也不能使用存储过程。

【问题讨论】:

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


    【解决方案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]  +   "'"
    

    【讨论】:

    • 谢谢!这有很大帮助,我得到了它的工作。我最终不得不将 drop 语句移动到单独的 sql 任务中。
    • @DericPlummer 乐于助人
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2020-01-05
      • 1970-01-01
      • 2017-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-07
      • 1970-01-01
      相关资源
      最近更新 更多