MySql 5.5.40存储过程@@Identity

MySql 5.5.40存储过程@@Identity,mysql,database,stored-procedures,crud,identity,Mysql,Database,Stored Procedures,Crud,Identity,当我试图用上一个操作的@Identity值覆盖一个变量时,存储过程中出现了一个问题。我将写一个例子: DECLARE out_result BIGINT(20); SET out_result = -1; UPDATE tableName SET name = "pippo" WHERE id = 12; SELECT @@Identity INTO out_result; -- here it works great and out_result value is 12 IF out_re

当我试图用上一个操作的@Identity值覆盖一个变量时,存储过程中出现了一个问题。我将写一个例子:

DECLARE out_result BIGINT(20);
SET out_result = -1;

UPDATE tableName SET name = "pippo" WHERE id = 12;
SELECT @@Identity INTO out_result;
-- here it works great and out_result value is 12

IF out_result > 0 THAN
    UPDATE otheTableName SET address = "Route 666" WHERE id = 37;
    SELECT @@Identity INTO out_result;
END IF;
我希望,如果第一次操作成功,变量out_结果将大于0,现在代码将执行第二次更新,结果就是这样。
在第二次更新之后(但它也可能是一个delete示例),我希望out_result变量将接受第二次更新的值(在本例中out_result=37),但事实并非如此。这里的结果仍然等于12。如果您有什么想法,我们将不胜感激。谢谢。

首先,
MySQL
中没有
@@Identity
。您一定弄错了,可能是在谈论
SQL Server
。就您的情况而言,如果您仍然得到
结果=12
,那么我相信相应的
更新
语句(如下所述)没有处理任何行,因为id=37的条件
不匹配(或)返回了
FALSE
。您可以使用
@@ROWCOUNT
系统全局变量检查并验证相同的设置

UPDATE otheTableName SET address = "Route 666" WHERE id = 37;

@@Identity
???您在这里谈论的是
MySQL
还是
MSSQL
?谢谢您的回答,我正在处理一个预先存在的项目,我发现使用@标识仍然很有用。我说的肯定是MySql。如果你是对的。。。现在奇怪的是:“为什么它在第一种情况下有效?”。@ROWCOUNT是获取相同信息的安全方法吗?我还尝试将第二次更新的@Identity值存储在另一个变量中,并获得“null”,但在数据库中更新成功。奇怪的是,在第一次更新中,我获得的as@@标识正是我所期望的。我很困惑。。。无论如何:MySql 5.5.40中获取上次执行的操作ID的最安全方法是什么?老实说,MySql中没有
@@IDENTITY
;你肯定弄错了。在
MySQL
中,您应该改用
LAST\u INSERT\u ID
。没错,LAST\u INSERT\u ID似乎工作正常@@Identity似乎是在MySql的最新版本中引入的,它支持与SQL Server的兼容性,但是它有很多工作问题,并且没有正式的文档记录。非常感谢@卡皮尔森:如果你有新问题,请问一个新问题。