使用 SELECT 时只返回 3 行,使用 UPDATE 时,为什么许多行会受到影响?



当我运行查询时

SELECT * from AC where ACID in ('1','2','3')

我返回了 3 行。表中的每一行都有一个唯一的 ACID。但是,当我尝试仅使用这 3 行更新开始日期时间时

UPDATE AC set StartDateTime = '2019-09-30 00:00:00.000' where ACID in ('1','2','3')

我得到以下信息:

(3 行受影响(

(12 行受影响(

(3 行受影响(

当只应该更新 3 行时,怎么能更新这么多行?此表是否以某种方式链接到另一个表?

这很可能是因为您在外键关系上具有级联更新,可能深两级。第一个(3 row(s) affected)来自更新此表的孙行(子行的子行(;第二个(12 row(s) affected)来自更新此表的子行;最后一个(3 row(s) updated)来自更新此表。

这可能是由于@Larnu@tgralex和注释中建议的显式 UPDATE 触发器而不是外键关系而发生的——但这对我来说似乎不太可能;如果你为你的表编写了触发器,你可能会知道它们。

@Larnu @tgralex 我相信这就是答案,但它不是在更新不同的表,而是在更新自己。AC 表中有两个触发器,它们都用于在检测到在上一个最近的 StartDateTime 之后的 StartDateTime 行时更新 AC 表中的 EndDateTime,以便周期不重叠。第一个(3 row(s) affected)用于更新我最初提到的 StartDateTime,第二个(12 row(s) affected)用于检查与我正在更新的三个 ACID 具有共同位置的所有行,最后一个(3 row(s) updated)用于更新三个 ACID 的上一个最新 StartDateTime 的结束日期时间。

最新更新