从存储过程MySQL返回行ID

时间:2013-08-07 15:33:26

标签: mysql stored-procedures

我试图返回此语句的行值:

INSERT INTO SystemName (SystemName)
SELECT * FROM (SELECT v_SystemName) AS tmp
WHERE NOT EXISTS (
    SELECT * FROM SystemName WHERE SystemName = v_SystemName
) LIMIT 1;
SET id = LAST_INSERT_ID();

如果它确实插入了我需要它返回该行ID,否则它需要返回新的行ID。我试图使用LAST_INSERT_ID(),但是没有返回我需要的东西,因为如果它没有做插入,它会给出错误的结果。有没有人有想法可以使这项工作?

2 个答案:

答案 0 :(得分:0)

http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_last-insert-id

假设您的过程只需要返回行ID而不进行进一步处理,您可以尝试:SELECT LAST_INSERT_ID();

答案 1 :(得分:0)

所以,我最终做的就是这个,我知道它不是最好的解决方案,因为它不是一个事务,可能会导致一些问题,但这是我能让它工作的唯一方法。

INSERT INTO SystemName (SystemName)
SELECT * FROM (SELECT v_SystemName) AS tmp
WHERE NOT EXISTS (
     SELECT * FROM SystemName WHERE SystemName = v_SystemName
) LIMIT 1;
SELECT id FROM SystemName WHERE SystemName = v_SystemName;

这样我就不需要任何变量或任何东西,它只返回我的id。