При использовании SELECT возвращаются только 3 строки, при использовании UPDATE, почему затрагивается много строк? - PullRequest
0 голосов
/ 30 сентября 2019

Когда я запускаю запрос

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

, я получаю 3 возвращенные строки. Каждая строка в таблице имеет уникальный ACID. Однако, когда я пытаюсь обновить StartDateTime только в этих 3 строках, используя

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

, я получаю следующее:

(затронуто 3 ряда)

(12затронутые строки)

(затронуты 3 строки)

Как можно обновить столько строк, если предполагалось обновить только 3? Связана ли эта таблица с каким-либо другим способом?

Ответы [ 2 ]

0 голосов
/ 02 октября 2019

@ Larnu @tgralex Я полагаю, что это ответ, но он не обновляет другую таблицу, он обновляется сам. В таблице AC есть два триггера, и они оба предназначены для обновления EndDateTime в таблице AC, когда строка обнаруживается с StartDateTime после предыдущего самого последнего StartDateTime, чтобы периоды не перекрывались. Первый (3 row(s) affected) был для обновления StartDateTime, который я первоначально упомянул, второй (12 row(s) affected) был для проверки всех строк, которые имели Расположение, общее с тремя ACID, которые я обновлял, а последний (3 row(s) updated) былдля обновления EndDateTime для предыдущего самого последнего StartDateTime для трех ACID.

0 голосов
/ 30 сентября 2019

Вероятно, это связано с тем, что у вас есть каскадные обновления отношения внешнего ключа, возможно, на два уровня. Первый (3 row(s) affected) - от обновления строк внука этой таблицы (дочерние строки дочерних строк);второй (12 row(s) affected) от обновления дочерних строк этой таблицы;и последнее (3 row(s) updated) относится к обновлению этой таблицы.

Возможно, что вместо связи с внешним ключом это происходит из-за явного триггера UPDATE, как @Larnu и @tgralex предложили в комментариях - но этокажется менее вероятным для меня;если бы вы написали триггеры для своей таблицы, вы, вероятно, знали бы о них.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...