当我运行查询时
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 的结束日期时间。