|
Консультация по тригерам.
|
|||
---|---|---|---|
#18+
Добрый вечер. Больше недели пытаюсь разобраться с тригерами, но к сожалению безуспешно. Есть таблица Код: sql 1.
. Создал две таблицы для аудита. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Написал тригер для таблицы. Код: Код: 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.
Добавляю значение в таблицу Код: sql 1. 2. 3.
Всё успешно. При попытке другого добавления выходит ошибка. Код: sql 1. 2. 3.
Вложенный запрос вернул больше одного значения. Это запрещено, когда вложенный запрос следует после =, !=, <, <=, >, >= или используется в качестве выражения. Интернет проверял, но везде примеры добавления одного значения в таблицу при помощи IDENT_CURRENT, @@IDENTITY и SCOPE_IDENTITY, а у меня добавления двух значений. Из-за чего и выходит ошибка. Помогите разобраться, пожалуйста. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2020, 20:07 |
|
Консультация по тригерам.
|
|||
---|---|---|---|
#18+
Frankestein, У Вас проблема вот тут: Код: sql 1.
на момент второго срабатывания в триггере записей в Audit_operations будет больше 1, соответственно присваивание множественных значений переменной не допустимо. это равносильно такому: сравните два запроса: Код: sql 1. 2.
Код: sql 1. 2.
первый не ругнется потому что только одна строка, второй ругнется потому что строк 3 а переменная одна. что бы выбирать последнее значение identity вам не нужно его селектить из таблицы это функция возвращающая скалярное значение. достаточно просто присвоить ее результат переменной: Триггер должен выглядеть как то так: Код: 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. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2020, 22:25 |
|
Консультация по тригерам.
|
|||
---|---|---|---|
#18+
felix_ff Триггер должен выглядеть как то так: Я бы добавил: 1. Выбросьте из триггера все скалярные переменные. 2. Работайте с deleted и inserted как с таблицами. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2020, 13:43 |
|
Консультация по тригерам.
|
|||
---|---|---|---|
#18+
iap felix_ff Триггер должен выглядеть как то так: Я бы добавил: 1. Выбросьте из триггера все скалярные переменные. 2. Работайте с deleted и inserted как с таблицами. то и напишите 3 триггера вместо одного. Зачем корячиться-то? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2020, 15:17 |
|
Консультация по тригерам.
|
|||
---|---|---|---|
#18+
felix_ff У Вас проблема вот тут: Код: sql 1.
на момент второго срабатывания в триггере записей в Audit_operations будет больше 1, соответственно присваивание множественных значений переменной не допустимо. Так что сойдёт... iap felix_ff Триггер должен выглядеть как то так: Я бы добавил: 1. Выбросьте из триггера все скалярные переменные. 2. Работайте с deleted и inserted как с таблицами. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2020, 15:52 |
|
Консультация по тригерам.
|
|||
---|---|---|---|
#18+
felix_ff, Спасибо большое за подробное разъяснение моих ошибок. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.05.2020, 07:42 |
|
|
start [/forum/topic.php?fid=46&msg=39953473&tid=1686167]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
26ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
2ms |
others: | 15ms |
total: | 134ms |
0 / 0 |