MySQL存储过程 - 字符串参数不能使用双引号,但它使用单引号

时间:2017-11-24 18:58:43

标签: mysql

因此,我的存储过程最初会根据传入的字符串字段获取主键。

PROCEDURE `updateAsset`( IN _stringField VARCHAR(250))

DECLARE assetID int(11);
DECLARE assetName varchar(65);

SELECT 
    idAsset, asset_name
INTO assetID , assetName FROM
    Assets
WHERE
    stringField = _stringField
ORDER BY 1 DESC
LIMIT 1;

现在,当我调用这样的程序时会出现问题。

CALL updateAsset("Rack1");

使用双引号调用它会导致查询找不到匹配项并返回插入表中的最后一行。

但是,如果我使用单引号调用该过程,它就可以工作。

CALL updateAsset('Rack1');

我还想提一下,当使用双引号或单引号在存储过程外部运行时,没有select into的查询可以正常工作。

SELECT 
    idAsset, asset_name
 FROM
    Assets
WHERE
    stringField = "Rack1"
ORDER BY 1 DESC
LIMIT 1;

有人可以解释为什么会这样吗?

编辑 - 更好的解释

存储过程已返回表的最后一行,而没有在where子句中进行匹配。

如果没有order by 1 desc limit 1子句,它只返回表的最后一行where返回最后一行。

非proc查询将使用where子句找到正确的结果。

0 个答案:

没有答案