|
Подойдет ли мне триггер?
|
|||
---|---|---|---|
#18+
Здравствуйте! После удаления части строк из таблицы1 обнаружил, что все данные в таблице2 исчезают. Причем похоже лишь некоторые удаленные записи из таблицы1 удаляют все строки из таблицы2. Хочу отследить после удаления какой строки в таблице1 таблица2 становится пустой. Хочу для этого создать триггер на удаление записей из таблицы1, который после каждой удаленной строки будет логировать сколько осталось строк в таблице2. Сработает ли такая идея или триггер сработает только в конце, когда команда DELETE отработает до конца, удалив все намеченные на удаление в ней строки(и соответственно я не пойму, что обнулило таблицу2)? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 16:09 |
|
Подойдет ли мне триггер?
|
|||
---|---|---|---|
#18+
Борис Гаркун Хочу отследить после удаления какой строки в таблице1 таблица2 становится пустой Зачем? У вас всего два вариант: - уже имеющийся триггер - каскадное удаление Достаточно их проверить, чтобы понять, почему у вас записи удаляются во второй таблице. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 16:12 |
|
Подойдет ли мне триггер?
|
|||
---|---|---|---|
#18+
Критик Борис Гаркун Хочу отследить после удаления какой строки в таблице1 таблица2 становится пустой Зачем? У вас всего два вариант: - уже имеющийся триггер - каскадное удаление Достаточно их проверить, чтобы понять, почему у вас записи удаляются во второй таблице. и злобные юзеры да много еще можно придумать )) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 16:18 |
|
Подойдет ли мне триггер?
|
|||
---|---|---|---|
#18+
Да. В общем подойдет ли мне триггер? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 16:32 |
|
Подойдет ли мне триггер?
|
|||
---|---|---|---|
#18+
Борис Гаркун Да. В общем подойдет ли мне триггер? когда вообще все строки исчезают, это скорее всего truncate. и никакой триггер на delete его не отловит. а запускать этот truncate можно хоть с линкед сервера, о котором вы даже не подозреваете. охота проверить версию с delete? ну напишите триггер. но не на первую таблицу, а на ту, из которой строки исчезают. и логируйте в триггере dbcc inputbuffer включительно ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 17:19 |
|
Подойдет ли мне триггер?
|
|||
---|---|---|---|
#18+
Yasha123 но не на первую таблицу, а на ту, из которой строки исчезают. в этом случае как мне понять тогда, какая была удалена строка в таблице1? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 18:43 |
|
Подойдет ли мне триггер?
|
|||
---|---|---|---|
#18+
Борис Гаркун Yasha123 но не на первую таблицу, а на ту, из которой строки исчезают. в этом случае как мне понять тогда, какая была удалена строка в таблице1? А откуда уверенность, что эти операции связанны друг с другом? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 18:59 |
|
Подойдет ли мне триггер?
|
|||
---|---|---|---|
#18+
Уверенность оттуда, что это факт. Я проверяю количество записей в таблице2 до и после удаления некоторого количества записей из таблицы1. Попробовал я кстати сделать триггер, не помогло, в нем отлогированы все записи удаленные из таблицы1, и сразу же с первой удаленной строкой количество записей в таблице2 стало равным 0. Удаление кстати завернуто в транзакцию, может из-за этого так неинформативно получилось с триггером? Когда удалил отдельно одну строку, то количество записей в таблице2 уменьшилось на несколько штук, но не до 0. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 09:09 |
|
Подойдет ли мне триггер?
|
|||
---|---|---|---|
#18+
Борис Гаркун, Раз уж можете создать триггер на таблицу, то получить DDL обеих таблиц с внешними ключами и текущими триггерами на них, думаю, труда не составит. Список полей интересует мало, а вот ключи и триггеры - в студию. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 09:20 |
|
Подойдет ли мне триггер?
|
|||
---|---|---|---|
#18+
Yasha123 Борис Гаркун Да. В общем подойдет ли мне триггер? когда вообще все строки исчезают, это скорее всего truncate. и никакой триггер на delete его не отловит. а запускать этот truncate можно хоть с линкед сервера, о котором вы даже не подозреваете. охота проверить версию с delete? ну напишите триггер. но не на первую таблицу, а на ту, из которой строки исчезают. и логируйте в триггере dbcc inputbuffer включительно в триггере на второй таблице поставить роллбэк и ждать ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 10:48 |
|
Подойдет ли мне триггер?
|
|||
---|---|---|---|
#18+
env Раз уж можете создать триггер на таблицу, то получить DDL обеих таблиц с внешними ключами и текущими триггерами на них, думаю, труда не составит. Список полей интересует мало, а вот ключи и триггеры - в студию. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34.
А это определение второй таблицы: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 12:03 |
|
Подойдет ли мне триггер?
|
|||
---|---|---|---|
#18+
Борис Гаркун, Интересный триггер, многое объясняет. упд. Особенно комментарий про назначение понравился. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 12:12 |
|
Подойдет ли мне триггер?
|
|||
---|---|---|---|
#18+
env Борис Гаркун, Интересный триггер, многое объясняет. упд. Особенно комментарий про назначение понравился. Радикальная модификация ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 12:40 |
|
Подойдет ли мне триггер?
|
|||
---|---|---|---|
#18+
Борис Гаркун, Выполните код: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
и станет все ясно без тригеров ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 13:00 |
|
Подойдет ли мне триггер?
|
|||
---|---|---|---|
#18+
env Интересный триггер, многое объясняет. по триггеру видно, что по удалению записей в таблице1, удаляются связанные записи из таблицы2. Но как отследить после удаления какой записи таблицы1 таблица 2 оказывается пустой? Oleg_SQL, не понимаю, зачем мне выполнять ваш запрос. Задача другая ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 14:10 |
|
Подойдет ли мне триггер?
|
|||
---|---|---|---|
#18+
Борис Гаркун, мда... Если у вас в Таблице1, например, 20 записей, а в Таблице2 - 1 миллион и мой запрос покажет на строке с ID = 12 значение [Кол-во привязанных строк во 2-й таблице] = 1 000 000, то и это вам ни о чем не скажет ?? Если же вам нужно именно отследить - создайте таблицу с полем для лога и в том же триггере туда добавляйте информацию ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 14:38 |
|
Подойдет ли мне триггер?
|
|||
---|---|---|---|
#18+
Oleg_SQL, Думаю, можно проще Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 14:45 |
|
Подойдет ли мне триггер?
|
|||
---|---|---|---|
#18+
env, а где информация из Таблицы1 ? Если записей больше 20, то по GUID очень "наглядно" будет... ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 14:53 |
|
Подойдет ли мне триггер?
|
|||
---|---|---|---|
#18+
Oleg_SQL, А зачем? Борис Гаркун лишь некоторые удаленные записи из таблицы1 удаляют все строки из таблицы2 Значит распределение по полю link в таблице2 очень сильно перекошено в сторону малого числа значений. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 15:10 |
|
Подойдет ли мне триггер?
|
|||
---|---|---|---|
#18+
Oleg_SQL Если у вас в Таблице1, например, 20 записей, а в Таблице2 - 1 миллион и мой запрос покажет на строке с ID = 12 значение [Кол-во привязанных строк во 2-й таблице] = 1 000 000, то и это вам ни о чем не скажет ?? Если же вам нужно именно отследить - создайте таблицу с полем для лога и в том же триггере туда добавляйте информацию Проверил эту гипотезу, такого ассиметричного распределения нет. Триггер создавал, как отписывался выше, но он почему-то на первой же удаленной строке сразу показал, что удалены все строки в Таблице2, хотя в Таблице2 для этой строки только одна строка. Такое ощущение, что сначала DELETE все намеченное к удалению удалил из Таблицы1, по триггеру на Таблице1 все удалилось из Таблицы2, а потом сервер вспомнил про мой триггер логирования на Таблице1, и в логах отобразилось, что в Таблице2 0 записей, даже на момент удаления первой строки из Таблицы1. Может ли такое быть? Повлияло ли на такую картину то, что я удалял строки из Таблицы1 в рамках транзакции, или может я неправильно определил триггер логирования? Вот кстати его код: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 17:41 |
|
Подойдет ли мне триггер?
|
|||
---|---|---|---|
#18+
авторно он почему-то на первой же удаленной строке сразу показал, что удалены все строки в Таблице2 , хотя в Таблице2 для этой строки только одна строка. что написал, то он и показал: Код: sql 1. 2.
посчитал число строк во ВСЕЙ таблице и записал это напротив LINK и сам же и поверил, что это число записей, соответствующих LINK? еще раз. триггер надо вешать на вторую таблицу. если исчезают все записи, то кто-то предварительно апдэйтит их все, записав туда значение LINK. одно LINK на всех. я даже знаю, кто не любит писать условие WHERE, но не будем тыкать пальцем... и в триггере на второй таблице в первой же строке вписать Код: sql 1. 2. 3. 4. 5.
и перестанут строки исчезать "все сразу" ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 19:34 |
|
Подойдет ли мне триггер?
|
|||
---|---|---|---|
#18+
Yasha123 если исчезают все записи, то кто-то предварительно апдэйтит их все, записав туда значение LINK. одно LINK на всех. поясните, где и что апдейтится? в таблице1 у всех обновляется столбец LINK одним и тем же значением? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 22:02 |
|
Подойдет ли мне триггер?
|
|||
---|---|---|---|
#18+
вы считаете, что удаляется из 2-ой таблицы ***только приведенным триггером***, так? но в приведенном триггере удаляются только связанные записи. если удаляются ***все*** строки, то или они вдруг ***все*** стали связанными с одной строкой первой таблицы (кто-то проапдэйтил вторую таблицу целиком одним и тем же значением, например ВЫ ЖЕ и проапдэйтили) или хватит уже цепляться к первой таблице и ее триггеру, логируйте уже триггером на 2-ой таблице dbcc inputbuffer, @@rowcount ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 22:37 |
|
Подойдет ли мне триггер?
|
|||
---|---|---|---|
#18+
Yasha123 логируйте уже триггером на 2-ой таблице dbcc inputbuffer, @@rowcount Спасибо, Яша. Что типа такого: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
? Ругается на строку в районе DBCC... Не пойму, как бы еще в INSERT добавить @@rowcount ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 21:23 |
|
|
start [/forum/topic.php?fid=46&msg=39997497&tid=1685663]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
39ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
others: | 16ms |
total: | 157ms |
0 / 0 |