2

我正在尝试为此语句返回行的值:

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() 但这并没有返回我需要的内容,因为如果它不进行插入,则会给出错误的结果。有没有人有一个想法可以使这项工作?

4

2 回答 2

0

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

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

于 2013-08-07T16:17:17.983 回答
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。

于 2013-08-08T14:51:21.693 回答