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

标签 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 作为正确的计数

当我在带有 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

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

enter image description here

最佳答案

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

我通常将 in_out_inout_ 作为参数名称的前缀;它还显示了参数的类型(为了便于阅读)。

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

关于Mysql存储过程返回一些奇怪的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53287877/

相关文章:

php - Mysql select 查询超过 8 秒但限制为 5 条记录

mysql - 使用正则表达式自动添加 mysql_real_escape_string

php - 为什么我的查询错误而 phpMyAdmin 的查询没有错误?

c# - SQL行没有被删除

mysql - 提供要从 mysql 结果中排除的用户主机对

php - 如何在不使用mysql_field_type的情况下提取mysql列的字段类型

database - PL/SQL : UTL_FILE. FOPEN 这将在客户端或服务器端打开文件

c# - 如何在 sql 存储过程中使用 C# 方法

sql-server - 存储过程(处理数据然后插入到另一个表中)

sql - 存储过程更容易维护吗?