UPDATE 后的 @@ROWCOUNT 是否可靠地衡量*匹配*行?

2024-03-16

Does @@ROWCOUNT可靠地告诉你有多少行matched the WHERE条款中的UPDATE,而不是实际有多少changed by it?

In 的文档@@ROWCOUNT http://msdn.microsoft.com/en-gb/library/ms187316.aspx它说:

数据操作语言 (DML) 语句设置@@ROWCOUNT值到行数affected通过查询并将该值返回给客户端。

(我的强调。)

但如果我有

CREATE TABLE [Foo] ([a] INT, [b] INT)
GO
INSERT INTO [Foo] ([a], [b]) VALUES (1, 1),(1, 2),(1, 3),(2, 2)
GO
UPDATE [Foo] SET [b] = 1 WHERE [a] = 1
SELECT @@ROWCOUNT
GO

...我懂了3(匹配的行数[a] = 1), not 2(修改的行数UPDATE— 三行之一已经具有该值1 for b)。这似乎是“受影响”的一个奇怪的定义(不是wrong,与我通常使用这个词的方式不一致——事实上,它对于我想做的事情来说非常方便)。

(类似MySQLROW_COUNT http://dev.mysql.com/doc/refman/5.7/en/information-functions.html#function_row-count例如,函数将返回2在这个情况下。)

这种行为是否可靠,是否理想地记录在我尚未找到的地方?或者是否存在奇怪的边缘情况......

需要明确的是:我不是问是否3 is the right回答。我问的是不是reliable答案,或者是否存在 SQL Server 会遗漏匹配但不需要更改的行的边缘情况。

Update:有几个人问(或暗示)我担心什么样的“可靠性”问题。事实上它们非常模糊,但是,我不知道,复制?交易?分区?它可以使用索引来避免查找行,因为它知道b已经1,所以它会跳过那些? ...?

Update:我希望有人对 SQL Server 如何工作有更“内部”的看法来回答这个问题,但它看起来像触发器示例(以及我玩过的其他示例)通过 xacinay https://stackoverflow.com/a/23954719/157247已经是我们所能达到的最接近的了。而且它看起来非常坚固;如果它在正常情况下表现得如此,并且尽管进行了分区或其他什么,但它并没有那样表现,正如有人所说,那肯定会成为一个错误。这只是经验性的而非学术性的。


The 的文档@@ROWCOUNT http://msdn.microsoft.com/ru-ru/library/ms187316.aspx告诉你真相,因为 3 行将是reliably受影响而不是MySQL 的 ROW_COUNT() http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_row-count.

不是 2(UPDATE 修改的行数 — 三个 rows 的 b) 值已为 1。

For UPDATE新值和以前的值是否相同并不重要。它只是执行其指示的操作:查找数据源,根据提供的条件过滤行,并对过滤的行应用“设置”更改。

这就是 SQL Server 毫无保留地工作的方式。 MySQL 的工作方式可能有所不同。行计数过程不是 SQL 标准的一部分。因此,每次从一种 RDBMS 切换到另一种 RDBMS 时,您都必须先检查一下是否存在此类问题。

查看实际更新行为的一些触发器:

CREATE TRIGGER [dbo].[trgFooForUpd]
ON [dbo].[Foo]
FOR UPDATE 
AS begin declare @id int;
      select @id = [a] from INSERTED;
      select * from INSERTED; end;
GO
CREATE TRIGGER [dbo].[trgFooAfterUpd]
ON [dbo].[Foo]
AFTER UPDATE 
AS print 'update done for ' + cast(coalesce( @@ROWCOUNT, -1) as varchar )+'rows'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UPDATE 后的 @@ROWCOUNT 是否可靠地衡量*匹配*行? 的相关文章

随机推荐

  • Jquery视差滚动效果-多方向

    我需要为客户构建一个多方向 JQuery 视差页面 他们基本上希望它以与此类似的方式工作 https victoriabeckham landrover com INT https victoriabeckham landrover com
  • 从 shell 脚本获取 pytest 退出代码

    我正在从 shell 脚本运行 pytest 测试 脚本中的相关行类似于 pytest pytest tests param my param 根据 pytest 文档 运行 pytest 可能会导致六种不同的退出代码 0 5 我的问题是如
  • PHP 数组插入无法按预期工作

    我正在尝试插入一些项目 假设nitems 它们都彼此不同 到一个数组 不知何故 最终的数组包括n items 它们都是相同的项目 最后插入的项目 这是我的代码 searchResults data foreach allowSearch a
  • 当应用程序在后台时获取本地通知

    当应用程序在后台时 不会调用 didReceive Local notification 所以我尝试从 didFinishLaunchingWithOptions 获取通知 BOOL application UIApplication ap
  • 使用 ffmpeg 创建视频

    我有 100 张图像 PNG 我想使用这些图像创建一个视频 我为此使用 ffmpeg 库 使用命令行我可以轻松创建视频 但是我如何通过编码来做到这一点呢 任何帮助将不胜感激 pragma GCC diagnostic ignored Wde
  • 为什么我不应该对 TD(表格单元格)上的数字使用已弃用的align='right'?

    我指的是用于显示表格数据的表格的用法 例如 电子表格 重点关注numbers 我感觉并在用户体验中查看 https ux stackexchange com a 24073应该右对齐 格式正确 具有相同的小数位数 以方便求和 对于数字来说
  • 带组的 Google 柱形图

    我的数据格式 Group Count Month Year A 10 February 2015 B 8 February 2015 C 15 February 2016 我将使用过滤器来显示按组列分隔的每个月的数据 X axis会有团体
  • 将固定大小的 Map 序列化为 CBOR

    我有以下 JSON 2 c true 3 p 10 我想转换为 CBOR 格式 根据 cbor me 我有以下输出 82A102A16163F5A103A161700A 但是 当使用 Jackson Binary CBOR Serializ
  • GCC链接器找不到标准库?

    我一直在使用 XCode 开发一个学校项目 最终产品必须以带有 makefile 的源代码形式提交 因此我编写了一个 makefile 并开始以这种方式进行编译 以确保我有一个工作副本 这是我的生成文件 all main o StackLi
  • 如何扩展具有动态形成选择器的类/混合

    如何扩展使用 组合器动态形成的 Less 类 less 产生预期输出 hello world color red foo extend hello world font size 20px 预期的 CSS 输出 hello world fo
  • pandas 数据框任意两列之间的百分比差异

    我想定义一个函数来计算任意两个 pandas 列之间的百分比差异 假设我的数据框是由以下定义的 R1 R2 R3 R4 R5 R6 A B 1 2 3 4 我希望我的计算定义为 df R7 df R3 R4 apply method cal
  • 如何分组并根据总和过滤数据框?

    所以我有一个数据框 milk countries exports 它由以下列组成 期间 特定行的年份和月份 数据集是一年中的逐月 正在做出口的 记者 国家 从 报告者 进口的 伙伴 国家 商品 由 2 项组成 既不浓缩也不加糖的牛奶和奶油
  • SqlDataReader 检查空值的最佳方法 -sqlDataReader.IsDBNull 与 DBNull.Value

    我想从数据库中检索十进制值 并且想知道检查空值的推荐方法 我见过MSDN DBNull Value 字段 http msdn microsoft com en us library system dbnull value aspx该检查很少
  • 如果我递增数组变量会发生什么?

    我知道如果指针位于堆上 则更改指针的地址是不安全的 因为稍后释放它会引起一些麻烦 但是如果指针在堆栈上声明 那么这样做安全吗 我正在谈论这样的事情 char arr one two three arr or arr 我希望我通过将 char
  • Vaadin 在另一个浏览器/选项卡/系统中关闭同一用户的 UI

    我正在 Vaadin 7 中做一个项目 我需要实现如下所示的登录功能 用户 A 登录到系统 1 他再次登录到另一个系统 2 现在我想知道如何关闭系统 1 上的用户界面 我尝试了一些方法 如果是同一个浏览器 可以关闭用户界面 但是 对于不同的
  • 可编辑组合框[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我必须创建一个可编辑的组合框 组合框包含姓名 年龄和城市 用户可以输入姓名 年龄或城市 组合框必须过滤所有包含的列表 并应显示相关列表 Eg
  • 如何在命名空间之间复制数据存储实体

    我想将一个命名空间 例如 www mysite com 中的所有数据复制到另一个命名空间 例如 nightly latest mysite appspot com 最好的方法是什么 示例命名空间不是随机的 它们是由 NamespaceFil
  • Javascript/jquery,获取 (x,y) 处的所有 div 位置。转发触碰? [复制]

    这个问题在这里已经有答案了 可能的重复 如何获取位于单击点的所有元素的列表 https stackoverflow com questions 3735278 how to get a list of all elements that r
  • 无法启动 RMI Fibonacci 服务器

    我正在学习 Java RMI 并且创建了一个非常简单的服务器来计算斐波那契数 服务器 FibonacciServer 创建一个负责计算序列 Fibonacci 的对象 并且该对象实现一个接口 IFibonacci FibonacciServ
  • UPDATE 后的 @@ROWCOUNT 是否可靠地衡量*匹配*行?

    Does ROWCOUNT可靠地告诉你有多少行matched the WHERE条款中的UPDATE 而不是实际有多少changed by it In 的文档 ROWCOUNT http msdn microsoft com en gb l