【发布时间】:2017-10-01 22:32:20
【问题描述】:
我有一个带有两个 varchar 输入参数和一个 int 输出参数的存储过程。这个想法是我传入表名和一个唯一的字符串,检查表以查看表中是否已经存在该字符串,如果存在则返回该记录的 id。目前的存储过程看起来像:
BEGIN
SET @getID = CONCAT('SELECT `id` as id_Out FROM ',tablename_In,' WHERE `formSecret`=',formSecret_In);
PREPARE stmt FROM @getID;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END
如果我传入一个数字,一切正常,我会得到一个记录 ID。如果我传入一个完整的字母数字字符串(这是唯一 ID),它会失败,告诉我该列不存在。
例如:call sp_GetRecordID(123456,'tbl_justsaythanks',@id_Out); 将返回一个我想要的记录 ID。
但是如果我从表中尝试一个真正的 id,那就是一个字符串......
`call sp_GetRecordID('fc66d9a82ba717e0931462370e64baff','tbl_justsaythanks',@id_Out);`
我得到“错误代码:1054。'where 子句'中的未知列'fc66d9a82ba717e0931462370e64baff'”
由于我是 MySQL 新手,所以我不确定我在这方面的立场 - 我怀疑这与在查询中应用刻度线来指定列有关,但我看不到就在此刻。
所以,如果能帮助我指出正确的方法,我们将不胜感激。
【问题讨论】:
-
我认为你需要交换你的两个输入参数:调用 sp_GetRecordID('tbl_justsaythanks','fc66d9a82ba717e0931462370e64baff',@id_Out);