MySql 5.5.40 存储过程@@Identity
MySql 5.5.40 stored procedure @@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_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。一些想法将不胜感激。谢谢
首先MySQL
中没有@@Identity
。您一定是弄错了,可能是在谈论 SQL Server
。对于您的情况,如果您仍然得到 out_result = 12
那么我相信相应的 UPDATE
语句(如下所示)没有处理任何行,因为条件 WHERE id = 37
不匹配(或) 已返回 FALSE
。您可以使用 @@ROWCOUNT
系统全局变量进行检查和验证。
UPDATE otheTableName SET address = "Route 666" WHERE id = 37;
当我尝试使用上次操作的@@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。一些想法将不胜感激。谢谢
首先MySQL
中没有@@Identity
。您一定是弄错了,可能是在谈论 SQL Server
。对于您的情况,如果您仍然得到 out_result = 12
那么我相信相应的 UPDATE
语句(如下所示)没有处理任何行,因为条件 WHERE id = 37
不匹配(或) 已返回 FALSE
。您可以使用 @@ROWCOUNT
系统全局变量进行检查和验证。
UPDATE otheTableName SET address = "Route 666" WHERE id = 37;