Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
тригер останавливает выполнение процедуры: КАК ИЗБЕЖАТЬ ЭТОГО
|
|||
|---|---|---|---|
|
#18+
короткий пример -------------------------------------------- Use tempdb Create Table tab1(c1 int, c2 varchar(10)) Go Create Trigger tr1_tab1 ON tab1 FOR INSERT AS BEGIN if exists(select c2 from inserted where c2 = 'no') RollBack Tran End Go Create Proc Proc1 As Begin Insert into tab1(c1,c2) values(1,'no') Insert into tab1(c1,c2) values(1,'yes') End Go Exec Proc1 Go Drop Proc Proc1 Go select * from tab1 go Drop Table tab1 Go --------------------------------------------- !)проверка целостности данных должна производиться только внутри тригера. стандартные ограничения целостности не подходят, так как в реальном тригере проверок намного больше и они значительно сложнее Перепробовал кучу вариантов SET XACT_ABORT SET NOCOUNT TRANSACTIONS @@ERROR Raiserror ни чего не получается !)работаю на SQL Server 2000 если кто-то сталкивался, помогите пожалуста!!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2002, 17:36 |
|
||
|
тригер останавливает выполнение процедуры: КАК ИЗБЕЖАТЬ ЭТОГО
|
|||
|---|---|---|---|
|
#18+
Весьма странный вопрос. Я полагаю, что он сводиться к следующему: "Как сделать, чтобы при добавлении данных из ХП триггер не срабатывал?" Я вижу два варианта: 1. Завести служебную таблицу с "флажковой ячейкой" и писать туда состояние "такой-то пользователь запустил ХП - ждать пока не закончу" 2. При входе в ХП делать ALTER TABLE table DISABLE TRIGGER, а при выходе ENABLE. Оба решения чреваты ошибками :-\ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2002, 19:25 |
|
||
|
тригер останавливает выполнение процедуры: КАК ИЗБЕЖАТЬ ЭТОГО
|
|||
|---|---|---|---|
|
#18+
вопрос в том, что если внутри процедуры выполнить вставку в таблицу и если тригер на вставку отменил её , то как сделать так чтоб выполнение процедуры продолжало выполняться, а не прекращалось? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2002, 12:40 |
|
||
|
тригер останавливает выполнение процедуры: КАК ИЗБЕЖАТЬ ЭТОГО
|
|||
|---|---|---|---|
|
#18+
Эта тема уже обсуждалась многократно. Триггер выполняется в рамках своей триггерной транзакции (неяной), которая является вложенной в транзакцию хранимой процедуры. Общая концепция вложенных транзакций MS - при откате любой вложенной транзакции откатываются все внешние, даже если они подтвердились. Если такое положение дел не устраивает, придумывай обходные пути. А именно, отменить вставку можно не только откатом транзакции, но и удалением только что вставленной записи... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2002, 17:21 |
|
||
|
тригер останавливает выполнение процедуры: КАК ИЗБЕЖАТЬ ЭТОГО
|
|||
|---|---|---|---|
|
#18+
2 izvra: Вам, все-таки, следует поупражняться с instead of триггерами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2002, 07:54 |
|
||
|
тригер останавливает выполнение процедуры: КАК ИЗБЕЖАТЬ ЭТОГО
|
|||
|---|---|---|---|
|
#18+
2Garya & 2MadDog Спасибо!!! Оба варианта вполне подходят. Только одна проблема @@rowcount в обоих варианах начинает очень жестоко врать Insert into tab1(c1,c2) values(1,'no') If @rowcount <> 1 Print 'error' Else Print 'ok' эта конструкция теперь не работает корректно, а хотелось бы чтоб для пользователя работа с такой таблицей ничем не отличалась бы, от работы с таблицей без тригеров. Поделитесь опытом, буду признателен!. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2002, 13:32 |
|
||
|
тригер останавливает выполнение процедуры: КАК ИЗБЕЖАТЬ ЭТОГО
|
|||
|---|---|---|---|
|
#18+
2 izvra: Почитайте BOL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2002, 14:18 |
|
||
|
тригер останавливает выполнение процедуры: КАК ИЗБЕЖАТЬ ЭТОГО
|
|||
|---|---|---|---|
|
#18+
Выдержки из BOL: ----------------------------------- If a ROLLBACK TRANSACTION is issued in a trigger: ... None of the statements in the batch after the statement that fired the trigger are executed. ----------------------------------- а также: ----------------------------------- When triggers that include ROLLBACK TRANSACTION statements are executed from a batch, they cancel the entire batch. In the following example, if the INSERT statement fires a trigger that includes a ROLLBACK TRANSACTION, the DELETE statement is not executed because the batch is canceled: /* Start of Batch */ INSERT employee VALUES ('XYZ12345M', 'New', 'M', 'Employee', 1, 1, '9952', '6/1/95') -- Causes trigger to fire and ROLLBACK TRANSACTION. DELETE employee WHERE emp_id = 'PMA42628M' GO ----------------------------------- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2002, 14:33 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32022697&tid=1823915]: |
0ms |
get settings: |
9ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
58ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
| others: | 273ms |
| total: | 406ms |

| 0 / 0 |
