当我在 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 作为正确的计数
当我在带有 2 个输入参数的 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
这里的问题是什么,因为两个查询完全相同。这是我运行存储过程的方式
最佳答案
您应该避免使用与 SP 中使用的列/别名相同的存储过程的参数名称。 WHERE office_id = office_id
由于名称不明确而表现得很奇怪。 MySQL 可能无法将其解析为列名或参数。
我通常将 in_
或 out_
或 inout_
作为参数名称的前缀;它还显示了参数的类型(为了便于阅读)。
因此您可以将参数重命名为 in_office_id
和 in_order_date
。
关于Mysql存储过程返回一些奇怪的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53287877/