Mysql存储过程返回一些奇怪的结果

时间:2018-11-13 19:03:55

标签: mysql stored-procedures

当我运行以下命令时,请在SQl中选择“查询”

SELECT Count(*) 
FROM   workordercurrent 
WHERE  office_id = 1 
       AND ( ( scheduleddate = '2018-11-01' ) 
              OR ( schedulestopdate = '2018-11-01' ) 
              OR ( scheduleddate = '0000-00-00' 
                   AND orderdate = '2018-11-01' ) ) 
       AND worktype <> 6 

查询返回694作为正确计数

当我在带有两个输入参数的SQL过程中编写相同的查询时

office_id(int) and order_date (DATE)


BEGIN 
    SELECT Count(*) 
    FROM   workordercurrent 
    WHERE  office_id = office_id 
           AND ( ( scheduleddate = order_date ) 
                  OR ( schedulestopdate = order_date ) 
                  OR ( scheduleddate = '0000-00-00' 
                       AND orderdate = order_date ) ) 
           AND worktype <> 6; 
END 

It returns the count as 3260

这是什么问题,因为两个查询完全相同。这是我运行存储过程的方式

enter image description here

1 个答案:

答案 0 :(得分:1)

您应该避免使用与SP中使用的列/别名相同的存储过程的参数名称。 WHERE office_id = office_id由于名称不明确而显得很奇怪。 MySQL可能无法将其解析为列名或参数。

我通常在参数名称前加上in_out_inout_;还显示了参数的类型(出于可读性)。

因此,您可以将参数重命名为in_office_idin_order_date