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

Sql server 当使用SELECT时只返回3行,当使用UPDATE时,为什么会有许多行受到影响?,sql-server,ssms,Sql Server,Ssms,当我运行查询时 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行时,如何更新这么多行?此表是否以某种方式链接到另一个表?这很可能是因

当我运行查询时

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行来自更新此表的孙行和子行的子行;受影响的第二个12行来自更新此表的子行;最后3行是通过更新此表更新的


这可能是因为@Larnu和@tgralex在评论中建议的显式更新触发器,而不是外键关系,但我觉得这不太可能;如果您为表编写了触发器,您可能会知道它们。

@Larnu@tgralex我相信这就是答案,但它不是在更新另一个表,而是在更新自身。AC表中有两个触发器,它们都用于在检测到一行的StartDateTime在上一个最近的StartDateTime之后时更新AC表中的EndDateTime,以便周期不重叠。前3行受影响用于更新我最初提到的StartDateTime,后12行受影响用于检查所有与我正在更新的三种酸位置相同的行,最后3行更新是为了更新三种酸的上一次最新开始日期时间的EndDateTime。

表中还有哪些字段?是否有其他表通过外键关系链接到此表?输出显示有3组结果;它显示您的SELECT返回了3个结果,但随后有12行受到影响,后面可能是与原始SELECT相同的3行。我怀疑您的AC表上有一个触发器,另一个表正在生效。这很可能是更新触发器的更新@RobStreeting只存在一个外键关系,并且该表上的任何内容在相当长的一段时间内都没有被修改。我实际上没有编写该表,这就是为什么我不想查看触发器,但这些触发器似乎是更新的原因。没有其他外键表收到任何更新。