Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Откат в триггере?
|
|||
|---|---|---|---|
|
#18+
День добрый. Такая вот проблема, как откатить INSERT в таблицу из триггера на эту таблицу(по какому-то условию). Вся эта операция происходит в одной большой транзакции и эту транзакцию откатывать нельзя. Зарание спасибо, Дмитрий ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2001, 16:20 |
|
||
|
Откат в триггере?
|
|||
|---|---|---|---|
|
#18+
Это можно сделать не откатом, а удалением только что вставленных записей в триггере: delete from MyTable from MyTable T inner join inserted I on T.ID=I.ID ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2001, 16:26 |
|
||
|
Откат в триггере?
|
|||
|---|---|---|---|
|
#18+
Если я правильно понял, то при возникновении своего условия пишешь rollback tran и все. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2001, 22:57 |
|
||
|
Откат в триггере?
|
|||
|---|---|---|---|
|
#18+
В контексте приведенной задачи писать rollback в триггере нельзя, потому что произойдет откат не только последней операции, но и всей транзакции. Удаление только что вставленных записей - штука неплохая, но где гарантия, что написанный там delete сработает без ошибок (нарушения целостности, работа других триггеров и т.д.)? Никакой. В "лабораторных условиях" все будет работать замечательно, а в один прекрасный день в реальной ситуации вы очень удивитесь... Может, в данном случае лучше не допускать неправильных инсертов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2001, 06:28 |
|
||
|
Откат в триггере?
|
|||
|---|---|---|---|
|
#18+
Можно попробовать такой вариант (правда я не уверен, что он будет работать в разных версиях SQL - у меня 7.0): В триггере, где надо откатить напишите ROLLBACK TRANSACTION T_INSERT_MyTable -- Или другое название, как захотите А перед вставкой записей добавьте SAVE TRANSACTION T_INSERT_MyTable -- название сохраняемой точки отката, как в триггере Всё. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2001, 08:35 |
|
||
|
Откат в триггере?
|
|||
|---|---|---|---|
|
#18+
А почему нельзя воспользоваться instead триггерами? проверяешь уловие и если не проходит, то просто не вставляешь и все .. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2001, 08:53 |
|
||
|
Откат в триггере?
|
|||
|---|---|---|---|
|
#18+
Дмитрий, у Вас нелогичная схема работы приложения. Из-за этого и вопрос, ставящий всех в тупик. Зачем объявлять транзакцию (единую-неделимую по-определению), если отдельная её часть должна жить своей жизнью? Отказать в жёсткой форме! (С) Советская бюрократия ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2001, 09:17 |
|
||
|
Откат в триггере?
|
|||
|---|---|---|---|
|
#18+
Глеб Уфимцев, зачем так строго Транзакция "единой-неделимой по-определению" является только для внешнего мира, да и то только в отношении завершения-отката. А внутри же самой транзакции она очень даже делимая, для того и существуют "Transaction Savepoints". Поэтому внутри транзакции можно делать частичные откаты при том, что вся транзакция завершена. Т.е.: делаем шаги 1, 2, 3, отменяем до начала шага 2, делаем шаг 4. BEGIN TRANSACTION T --делаем шаг 1 SAVE TRANSACTION T1 --делаем шаг 2 ... --делаем шаг 3 ROLLBACK TRANSACTION T1 --делаем шаг 4 COMMIT TRANSACTION T Результат: шаг 1, шаг 4. Это нормальная ситуация. А вопрос в том, может ли откат к T1 быть произведён из триггера. По моему мнению - да. Формально этому препятствий нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2001, 10:31 |
|
||
|
Откат в триггере?
|
|||
|---|---|---|---|
|
#18+
Исключительно, чтобы помочь (конечно же, не из злобы ). Ну, в плане того, что если нелогичность в приложении имеет место быть, то лучше подправить логику, чем танцевать от ложных предпосылок, которые могут в итоге завести в тупик. Совет об использовании SAVEPOINT вроде бы бесполезен, так как для реализации этого перед инсертом необходимо прописать "SAVE TRANSACTION", где проще поставить IF, не допускающий операции INSERT по какому-то условию. Скорее всего, Дмитрий не имеет возможности это сделать (например, код процедуры не его), иначе вопрос бы вообще не возник. А раз так, то он не имеет возможности прописать и SAVE TRANSACTION. Если я в этом не прав, позвольте мне съесть свой галстук. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2001, 11:26 |
|
||
|
Откат в триггере?
|
|||
|---|---|---|---|
|
#18+
Так и я, чтобы помочь, и тоже не из злобы . Поскольку никто, кроме самого автора вопроса, не знает всех обстоятельств проблемы, а они, обстоятельства, могут быть достаточно сложны, чтобы их расписывать в вопросе, то можно или их домысливать, или принимать вопрос как он есть. Я, ставя себя на место вопрошающего, предпочёл бы услышать хотя бы один (а лучше несколько) из вариантов решения моей проблемы. Или убедиться, что проблема, как она есть, нерешаема. А если же на мой вопрос будет много ответов, но исходящих из собственных домыслов отвечающих, меня бы это не обрадовало. Это всё равно что на вопрос "сколько времени", мне все рядом стоящие начнут рассказывать, какие существуют способы решить мою проблему раз и навсегда. Так я и сам знаю, что лучший способ - иметь при себе часы . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2001, 12:35 |
|
||
|
Откат в триггере?
|
|||
|---|---|---|---|
|
#18+
A ROLLBACK trigger не подойдет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2001, 12:12 |
|
||
|
Откат в триггере?
|
|||
|---|---|---|---|
|
#18+
> Rollback Trigger А разве MS SQL это умеет? Sybase точно умеет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2001, 13:12 |
|
||
|
Откат в триггере?
|
|||
|---|---|---|---|
|
#18+
В MSSQL нет такого понятия. Поэтому откатится вся внешняя транзакция, а не только действия, сделанные в триггере. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2001, 13:27 |
|
||
|
Откат в триггере?
|
|||
|---|---|---|---|
|
#18+
Вынужден повториться. При выполнении ROLLBACK TRANSACTION ABCD, ВСЯ внешняя транзакция откатится ТОЛЬКО если не было SAVE TRANSACTION ABCD. Иначе откат произойдёт то точки ABCD, но внешняя транзакция НЕ откатится и выполнение BATCH-а будет продолжено. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2001, 13:54 |
|
||
|
Откат в триггере?
|
|||
|---|---|---|---|
|
#18+
Самый правильный ответ (правда, и самый короткий) дал Andrey. Правда, почему-то он как-то остался в стороне обсуждения. Instead-триггер - вот что вам нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2001, 18:15 |
|
||
|
Откат в триггере?
|
|||
|---|---|---|---|
|
#18+
Instead-триггер - вещь безусловно полезная, но это не панацея от всех проблем. Например: производятся изменения в таблице Т1. При этом, для реализации логики, триггер на Т1 производит изменение в Т2. Но у Т2 тоже есть триггер, производящий изменения, возможно довольно сложные. Но данные в Т2 связаны с Т1, их нельзя изменить, не изменив предварительно Т1. А в триггере Т1 проверяется результат изменений в Т2, и в случае невыполнения каких либо условий - откат. Так вот, для реализации подобной логики в Instead-триггере придётся в него поместить не изменение Т2 с последующей проверкой, а сымитировать весь процесс изменений Т1 и Т2, включая логику триггера Т2, проанализировать результаты и принимать решение. В результате, для подобных случаев, применение Instead-триггера может потребовать значительных усилий по переделке и усложнению логики, и станет нецелесообразным. Когда-же ситуация проще и корректность изменений легко определяется до их внесения, лучше, разумеется, применить Instead-триггер. Какова ситуация у Дмитрия Русановского неизвестно, поэтому только он (Дмитрий Русановский) может решить, какой вариант для него лучше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2001, 07:38 |
|
||
|
Откат в триггере?
|
|||
|---|---|---|---|
|
#18+
Попробовал RollBack Trigger - действительно нету, ошиПка говоритЬ... странно все это: очень нужная весЧь. Что самое странное, так это то, что в книжке "Использование Microsoft SQL Server 7.0 Специальное издание." Стефана Винкопа (издательство Вильямс, 1999) даже такой раздел есть (стр.420-421) и очень все классно расписано... Я в растерянных чувствах... Два месяца проектировал БД, в планах реализации много чего было основано именно на RollBack Trigger... И что, теперь опять изголяться?... достало!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2001, 14:23 |
|
||
|
Откат в триггере?
|
|||
|---|---|---|---|
|
#18+
"В печь её!" Этот автор - полный кретин. В указанной книге СТОЛЬКО несуразностей! А в своей предыдущей книге по sql6.5, с которой он почти вслепую скопировал 90% в книгу по sql7.0, он на полном серьезе утверждал о наличии каскадных обновлений в sql6.5. То же самое, естественно, он утверждает и в книге по 7.0. "ROLLBACK TRIGGER" - это, конечно, вершина его перлов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2001, 14:59 |
|
||
|
Откат в триггере?
|
|||
|---|---|---|---|
|
#18+
Всем количеством своих конечностей поддерживаю Глеба! Когда я читал книгу по версии 7.0, я был просто ошеломлен некомпетентностью автора. Слишком бросается в глаза, что автор даже не удосужился ознакомиться с новыми возможностями версии 7.0, в том числе с теми, которые изменяют стратегические возможности SQL-сервера, технологию его администрирования и разработки БД. В частности, автор весьма уверенно заявляет, что в данной версии всего два вида архивирования - полное и журнала транзакций. Сразу видно, что, о новом виде разностного архивирования он просто не в курсе. Ограничения на размер записи, полей разных типов и т.п. приведены от версии 6.5. О двух новых видах репликации - Merge и непосредственно обновляемых подписчиках - ни гу-гу. Тоже не успел, видимо, сам об этом почитать. Какого черта тогда взялся за публикацию книги о новой версии, если сам о ней ничерта не знаешь? Вопрос, в общем-то, риторический.... Меня просто поразила наглость автора, который осмелился с такими знаниями вылезать в свет с публикацией книги. Видимо, жутко жадный до денег и совести - ни грамма. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2001, 15:43 |
|
||
|
Откат в триггере?
|
|||
|---|---|---|---|
|
#18+
а в 2000 SQL этот самый RallBack Trigger или что-то вроде этого есть? - мне еще не поздно перекочевать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2001, 09:48 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32018355&tid=1824625]: |
0ms |
get settings: |
7ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
48ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
| others: | 209ms |
| total: | 332ms |

| 0 / 0 |
