当使用 SELECT 时只返回 3 行,当使用 UPDATE 时,为什么很多行受到影响?
When using SELECT only 3 rows are returned, when using UPDATE, why are many rows affected?
当我运行查询
SELECT * from AC where ACID in ('1','2','3')
我返回了 3 行。 table 中的每一行都有一个唯一的 ACID。但是,当我尝试使用
仅在这 3 行中更新 StartDateTime
UPDATE AC set StartDateTime = '2019-09-30 00:00:00.000' where ACID in ('1','2','3')
我得到以下信息:
(3 行受影响)
(12 行受影响)
(3 行受影响)
本来应该只更新 3 行,怎么能更新这么多行?这 table 是否以某种方式与另一个链接?
这似乎很可能是因为您在外键关系上进行了级联更新,可能有两层深。第一个(3 row(s) affected)
来自更新这个table的孙子行(子行的子行);第二个 (12 row(s) affected)
来自更新此 table 的子行;最后一个 (3 row(s) updated)
来自更新这个 table.
这可能不是外键关系,而是由于@Larnu 和@tgralex 在评论中建议的显式更新触发器而发生的——但这对我来说似乎不太可能;如果您为 table 编写了触发器,您可能会知道它们。
@Larnu @tgralex 我相信这就是答案,但它没有更新不同的 table,它正在更新自己。 AC table 中有两个触发器,它们都用于更新 AC table 中的 EndDateTime 当在上一个最近的 StartDateTime 之后检测到具有 StartDateTime 的行时,这样时间段就不会重叠。第一个 (3 row(s) affected)
用于更新我最初提到的 StartDateTime,第二个 (12 row(s) affected)
用于检查与我正在更新的三个 ACID 具有共同 Location 的所有行,最后一个(3 row(s) updated)
用于更新三个 ACID 的上一个最新 StartDateTime 的 EndDateTime。
当我运行查询
SELECT * from AC where ACID in ('1','2','3')
我返回了 3 行。 table 中的每一行都有一个唯一的 ACID。但是,当我尝试使用
仅在这 3 行中更新 StartDateTimeUPDATE AC set StartDateTime = '2019-09-30 00:00:00.000' where ACID in ('1','2','3')
我得到以下信息:
(3 行受影响)
(12 行受影响)
(3 行受影响)
本来应该只更新 3 行,怎么能更新这么多行?这 table 是否以某种方式与另一个链接?
这似乎很可能是因为您在外键关系上进行了级联更新,可能有两层深。第一个(3 row(s) affected)
来自更新这个table的孙子行(子行的子行);第二个 (12 row(s) affected)
来自更新此 table 的子行;最后一个 (3 row(s) updated)
来自更新这个 table.
这可能不是外键关系,而是由于@Larnu 和@tgralex 在评论中建议的显式更新触发器而发生的——但这对我来说似乎不太可能;如果您为 table 编写了触发器,您可能会知道它们。
@Larnu @tgralex 我相信这就是答案,但它没有更新不同的 table,它正在更新自己。 AC table 中有两个触发器,它们都用于更新 AC table 中的 EndDateTime 当在上一个最近的 StartDateTime 之后检测到具有 StartDateTime 的行时,这样时间段就不会重叠。第一个 (3 row(s) affected)
用于更新我最初提到的 StartDateTime,第二个 (12 row(s) affected)
用于检查与我正在更新的三个 ACID 具有共同 Location 的所有行,最后一个(3 row(s) updated)
用于更新三个 ACID 的上一个最新 StartDateTime 的 EndDateTime。