SSIS 在 SQL 命令中使用 ODBC 传递参数

SSIS passing paramater in SQL command with ODBC

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


查询生成器结果

无法识别字符串中的变量

尝试将字符串与此连接:

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

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

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

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

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

另请参阅联机丛书 - Map Query Parameters to Variables in an Execute SQL Task