因此,我的存储过程最初会根据传入的字符串字段获取主键。
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子句找到正确的结果。