【问题标题】:SSIS passing paramater in SQL command with ODBCSSIS 在 SQL 命令中使用 ODBC 传递参数
【发布时间】:2018-11-09 14:55:42
【问题描述】:

我正在尝试在 OBDC 的表达式构建器 SQL 命令中运行一个变量。

表达式如下所示

"SELECT Date(Curdate())                   AS 'Load Date', 
       Sum(CASE 
             WHEN pomstatus = 'TBR' 
                  AND Date(portdate) < Curdate() THEN 1 
             ELSE 0 
           END)                          AS 'Total Removes', 
            Min(CASE 
                         WHEN pomstatus = 'TBR' THEN portdate 
                         ELSE 'N/A' 
                       END) AS 'Oldest Removes', 
       Sum(CASE 
             WHEN pomstatus = 'TBR' 
                  AND Date(portdate) < Curdate() 
                  AND Date(portdate) > Subdate(Curdate(),  @[User::Days] )THEN 1 
             ELSE 0 
           END)                          AS 'Total New Removes', 
       Sum(CASE 
             WHEN pomstatus = 'TBR' 
                  AND acctype = 'b' 
                  AND Date(portdate) < Curdate() THEN 1 
             ELSE 0 
           END)                          AS 'SOHO Removes', 
       Sum(CASE 
             WHEN pomstatus = 'C-U' 
                  AND Date(dd) < Curdate() THEN 1 
             ELSE 0 
           END)                          AS 'Total Confirmed U', 
            Min(CASE 
                         WHEN pomstatus = 'C-U' THEN dd 
                         ELSE 'N/A' 
                       END) AS 'Oldest Confirmed U', 
       Sum(CASE 
             WHEN pomstatus = 'C-U' 
                  AND discoservice LIKE '%s%' 
                  AND Date(dd) < Curdate()THEN 1 
             ELSE 0 
           END)                          AS 'Total Confirmed Satellite', 
            Min(CASE 
                         WHEN pomstatus = 'C-U' 
                              AND discoservice LIKE '%s%' THEN dd 
                         ELSE 'N/A' 
                       END) AS 'Oldest Confirmed Satellite', 
       Sum(CASE 
             WHEN pomstatus = 'C-U' 
                  AND Date(dd) < Curdate() 
                  AND Date(dd) > Subdate(Curdate(),   @[User::Days] ) THEN 1 
             ELSE 0 
           END)                          AS 'Total New Confirmed U', 
       Sum(CASE 
             WHEN pomstatus = 'pwo' THEN 1 
             ELSE 0 
           END)                          AS 'Total Pending WO', 
       Sum(CASE 
             WHEN pomstatus = 'etbr' THEN 1 
             ELSE 0 
           END)                          AS 'Total Escalated TBR', 
       Sum(CASE 
             WHEN pomstatus = 'wtnr' THEN 1 
             ELSE 0 
           END)                          AS 'Total Waiting TNR' 
FROM   POM.mainorders 
WHERE  acctype <> 'c';"

我收到以下错误:

错误弹出窗口

我测试了相同的脚本,但用数字 2 替换了 2 个变量并且它成功了,所以我知道脚本本身正在运行。在我看来,变量没有正确传递。

至于我如何填充变量,该变量是通过执行 SQL 任务填充的,如下图所示:

执行 SQL 任务


执行 SQL 任务


查询生成器结果

【问题讨论】:

标签: variables ssis sqlcommand expressionbuilder


【解决方案1】:

它无法识别字符串中的变量

尝试用这个连接字符串:

Subdate(Curdate(), "+ @[User::Days] + " )

就个人而言,我会在数据库中创建一个存储过程并传递两个参数,但并不是每个人都可以这样做。

【讨论】:

    【解决方案2】:

    这不是参数与执行 SQL 任务一起使用的方式。

    您要么按照@KeithL 的建议使用字符串连接,要么将变量 (@[User::Days]) 正确映射到参数(取决于您的提供者 - 基于序数的 ? 标记或命名参数 @myvalue

    由于您的提供程序指示 OLE DB,您将需要使用 ? 作为占位符,然后它将成为基于 0 的序号系统。点击参数映射,参数名称为0,变量为@[User::Days]

    另请参阅在线图书 - Map Query Parameters to Variables in an Execute SQL Task

    【讨论】:

    • 感谢您的评论,我确实尝试过,但无法正常工作/无法正确理解。 KeithL 的建议有效,但我会牢记这一点,以防将来出现问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多