1

我正在尝试在 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 任务


执行 SQL 任务

执行 SQL 任务


查询生成器结果

查询生成器结果

4

2 回答 2

2

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

尝试用这个连接字符串:

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

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

于 2018-05-30T19:14:54.607 回答
0

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

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

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

另请参见联机丛书 -将查询参数映射到执行 SQL 任务中的变量

于 2018-05-31T13:59:25.880 回答