我有一个简单的存储过程,它在表上进行更新。
CREATE PROCEDURE `test_v1`(
out v_changed_rows int
)
BEGIN
update mytable
set color = 'green'
where id = 964291;
set v_changed_rows= ROW_COUNT();
END
Run Code Online (Sandbox Code Playgroud)
从 mysql 工作台调用这个存储过程会得到正确的行影响(即第一次它将返回 1,因此返回 0,因为我用相同的值更新它,因此没有变化)
我尝试在for循环中调用此查询,并且每次返回1. 如何获取受查询影响的行,而不是查询找到的行?谢谢。
ROW_COUNT() 函数有这样的注释:
对于 UPDATE 语句,默认情况下受影响的行值是实际更改的行数。如果在连接到 mysqld 时为 mysql_real_connect() 指定 CLIENT_FOUND_ROWS 标志,则受影响的行值是“找到”的行数;也就是说,由 WHERE 子句匹配。
虽然它说默认情况下返回实际更改的行数,但对于 MySql .Net 客户端,默认行为是返回与 WHERE 子句匹配的行数。这应该是由于client_flag传递给mysql_real_connect的参数值所致。
您可以通过在连接字符串中显式设置UseAffectedRows来更改此行为True:
服务器=本地主机;用户ID=测试;密码=测试;数据库=测试;UseAffectedRows=True
我已经尝试过,它在 ADO.NET 和 Dapper 上都可以正常工作。
| 归档时间: |
|
| 查看次数: |
1518 次 |
| 最近记录: |