如何将多个参数传递到mysql存储过程中

如何将多个参数传递到mysql存储过程中,mysql,stored-procedures,Mysql,Stored Procedures,我有一个正在处理的存储过程,当我尝试向它传递参数时,与使用硬编码值运行时相比,它返回无效的返回 具有硬编码值的程序: BEGIN SELECT COUNT(DISTINCT ItemID) FROM ( SELECT * FROM sandbox_inventoryitempurchase WHERE OrgID = '2781823' AND PurchaseMonth>'2015-03-0

我有一个正在处理的存储过程,当我尝试向它传递参数时,与使用硬编码值运行时相比,它返回无效的返回

具有硬编码值的程序:

BEGIN
    SELECT COUNT(DISTINCT ItemID) 
    FROM ( 
        SELECT * 
        FROM sandbox_inventoryitempurchase 
        WHERE OrgID = '2781823' 
            AND PurchaseMonth>'2015-03-01'
    ) as DistinctCount;
END
运行时,返回:16,这是正确的

具有两个输入参数的过程:

BEGIN
    SELECT COUNT(DISTINCT ItemID) 
    FROM ( 
        SELECT * 
        FROM sandbox_inventoryitempurchase 
        WHERE OrgID = orgid 
            AND PurchaseMonth>sincedate
    ) as DistinctCount;
END
BEGIN 
    SELECT COUNT(DISTINCT ItemID) 
    FROM ( 
       SELECT * 
       FROM sandbox_inventoryitempurchase 
       WHERE OrgID = @orgid 
           AND PurchaseMonth>@sincedate
    ) as DistinctCount; 
END
输入参数定义为:

在userid integer中,在orgid integer中,在sincedate date中

运行时,返回:334,这是不正确的

我是存储过程新手,希望您能为我提供帮助,说明我做错了什么,以及我需要做什么来解决问题


谢谢…

在参数之前添加@:

BEGIN
    SELECT COUNT(DISTINCT ItemID) 
    FROM ( 
        SELECT * 
        FROM sandbox_inventoryitempurchase 
        WHERE OrgID = orgid 
            AND PurchaseMonth>sincedate
    ) as DistinctCount;
END
BEGIN 
    SELECT COUNT(DISTINCT ItemID) 
    FROM ( 
       SELECT * 
       FROM sandbox_inventoryitempurchase 
       WHERE OrgID = @orgid 
           AND PurchaseMonth>@sincedate
    ) as DistinctCount; 
END
快速turtorial将是:
请参阅本页末尾的如何使用参数…

尝试使用与列名称不同的输入参数。 更改:

致:

并以p_sincedate日期传递p_orgid整数


解析器可能会看到其中OrgID=OrgID,并且每个记录的计算结果都是true,因为它的计算结果是一个与自身比较的标识。

参数名和字段名必须不同

开始 选择COUNTDISTINCT ItemID 从…起 选择* 来自sandbox\u inventoryitempurchase 其中OrgID=p_OrgID 和PurchaseMonth>p_sincedate 作为一个独立的帐户; 终止

请编辑您的问题,并显示您的过程以及您如何调用它。您好,不是。我只是想在Navicat中运行存储过程。当我让它工作时,我正在从AwareIM开发的应用程序调用这个过程,因此调用过程可能不相关?我想看到它的原因是想看到您作为orgid和sincedate传递的内容。您是否在Navicat中提供了正确的值?我相信是的。当我在Navicat中运行程序时,它会提示我输入两个参数,我输入的27818232014-01-012014-01-01与2015-03-01不同。为什么您希望得到相同数量的结果?您好,谢谢,但现在我得到的结果是0。您好,结果不同,但仍然与硬编码值不同:开始选择COUNTDISTINCT ItemID FROM SELECT*FROM sandbox\u inventoryitempurchase WHERE OrgID='2781823'和PurchaseMonth>'2015-03-01'作为DistinctCount;结束返回:16 BEGIN SELECT COUNTDISTINCT ItemID FROM SELECT*FROM sandbox\u inventoryitempurchase其中OrgID=p\u OrgID AND PurchaseMonth>p\u PurchaseMonth as DistinctCount;以输入参数结束:在p_orgid integer中,在p_purchasemonth中日期值:27818232015-03-01返回:49有什么想法吗?你是否在日期“2015-03-01”周围加上单引号?我没有,但我现在有了,它解决了这个问题!我猜这是把它当作一种计算。马克,非常感谢你的帮助我真的很感激!