【问题标题】:MySql 5.5.40 stored procedure @@IdentityMySql 5.5.40 存储过程@@Identity
【发布时间】:2015-09-11 21:06:01
【问题描述】:

当我尝试使用最后一次操作的@@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_result 大于 0,现在代码将进行第二次更新,就是这样。 在第二次更新之后(但它也可能是例如删除),我希望 out_result 变量将采用第二次更新的值(在本例中为 out_result = 37),但事实并非如此。这里 out_result 仍然等于 12。一些想法将不胜感激。谢谢。

【问题讨论】:

  • @@Identity???你是在说MySQL 还是MSSQL

标签: mysql database stored-procedures crud identity


【解决方案1】:

首先MySQL 中没有@@Identity。你一定弄错了,可能是在谈论SQL Server。谈到您的情况,如果您仍然收到out_result = 12,那么我相信相应的UPDATE 语句(如下所示)没有处理任何行,因为条件WHERE id = 37 不匹配(或)已返回@987654327 @。你可以使用@@ROWCOUNT系统全局变量来检查和验证。

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

【讨论】:

  • 感谢您的回答,我正在处理一个预先存在的项目,我发现@@Identity 的这种用法仍在使用中。我肯定在谈论MySql。如果你是对的......现在奇怪的是:“为什么它在第一种情况下有效?”。无论如何,@@ROWCOUNT 是获取相同信息的安全方式吗?
  • 我也尝试将第二次更新的@@Identity 值存储在不同的变量中,并且我获得“null”,但在数据库中更新已成功完成。奇怪的是,在第一次更新中,我得到的 @@Identity 正是我所期望的。我很困惑...无论如何:MySql 5.5.40 中获取最后执行的操作的 ID 最安全的方法是什么?
  • 老实说,MySQL 中没有 @@IDENTITY;你肯定弄错了。在MySQL 中,您应该改用LAST_INSERT_ID
  • 你是对的 LAST_INSERT_ID 似乎工作正常。 @@Identity 似乎是在 MySql 的某些最新版本中引入的,支持与 SQL Server 的兼容性,但它有很多工作问题,并且没有正式记录。非常感谢!
  • @Kapilsoni:如果您有新问题,请提出新问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-01
  • 2017-04-26
  • 2011-03-09
  • 2011-03-31
  • 1970-01-01
相关资源
最近更新 更多