MySQL 存储过程 returns 多条记录同时直接查询 returns 一条
MySQL stored procedure returns multiple records while straight query returns one
如果我在下面创建这个存储过程和 运行 它我会从 table 返回两行,而它应该只是一个查询。
CREATE PROCEDURE `getUserName`(IN Guid VARCHAR(36), IN GameID INT(11))
BEGIN
SELECT `Name` as UserName, `GUID` as guid
FROM playerdata
WHERE `GUID` = Guid AND `GameID` = GameID;
END
CALL getUserName('86fd1007-4a9c-11e7-b2e2-1803733c2d41', 1001);
Returns 见图片
但是,如果我只是 运行 它作为常规查询
SELECT `Name` as UserName, `GUID` as guid
FROM playerdata
WHERE `GUID` = "86fd1007-4a9c-11e7-b2e2-1803733c2d41" AND `GameID` = 1001;
Returns 见图片
我对考虑到的行为感到困惑……至少对我来说它们是同一回事。
CREATE PROCEDURE `getUserName`(IN IN_Guid VARCHAR(36), IN IN_GameID INT(11))
BEGIN
SELECT `Name` as UserName, `GUID` as guid
FROM playerdata
WHERE `GUID` = IN_Guid AND `GameID` = IN_GameID ;
END
CALL getUserName('86fd1007-4a9c-11e7-b2e2-1803733c2d41', 1001);
试试上面的代码。
如果输入参数与列名同名,最终会等价于1=1
,所以condition.Means没有意义GameID = GameID
和1=1
都是相等的。
因此,请始终尝试使输入和输出参数名称与特定 table.
的列名称不同
我试过了,没问题。
希望对您有所帮助。
如果我在下面创建这个存储过程和 运行 它我会从 table 返回两行,而它应该只是一个查询。
CREATE PROCEDURE `getUserName`(IN Guid VARCHAR(36), IN GameID INT(11))
BEGIN
SELECT `Name` as UserName, `GUID` as guid
FROM playerdata
WHERE `GUID` = Guid AND `GameID` = GameID;
END
CALL getUserName('86fd1007-4a9c-11e7-b2e2-1803733c2d41', 1001);
Returns 见图片
但是,如果我只是 运行 它作为常规查询
SELECT `Name` as UserName, `GUID` as guid
FROM playerdata
WHERE `GUID` = "86fd1007-4a9c-11e7-b2e2-1803733c2d41" AND `GameID` = 1001;
Returns 见图片
我对考虑到的行为感到困惑……至少对我来说它们是同一回事。
CREATE PROCEDURE `getUserName`(IN IN_Guid VARCHAR(36), IN IN_GameID INT(11))
BEGIN
SELECT `Name` as UserName, `GUID` as guid
FROM playerdata
WHERE `GUID` = IN_Guid AND `GameID` = IN_GameID ;
END
CALL getUserName('86fd1007-4a9c-11e7-b2e2-1803733c2d41', 1001);
试试上面的代码。
如果输入参数与列名同名,最终会等价于1=1
,所以condition.Means没有意义GameID = GameID
和1=1
都是相等的。
因此,请始终尝试使输入和输出参数名称与特定 table.
我试过了,没问题。
希望对您有所帮助。