powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / тригер останавливает выполнение процедуры: КАК ИЗБЕЖАТЬ ЭТОГО
8 сообщений из 8, страница 1 из 1
тригер останавливает выполнение процедуры: КАК ИЗБЕЖАТЬ ЭТОГО
    #32022697
izvra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
короткий пример
--------------------------------------------

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

если кто-то сталкивался, помогите пожалуста!!!!
...
Рейтинг: 0 / 0
тригер останавливает выполнение процедуры: КАК ИЗБЕЖАТЬ ЭТОГО
    #32022702
SergCat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Весьма странный вопрос. Я полагаю, что он сводиться к следующему:
"Как сделать, чтобы при добавлении данных из ХП триггер не срабатывал?"
Я вижу два варианта:
1. Завести служебную таблицу с "флажковой ячейкой" и писать туда состояние "такой-то пользователь запустил ХП - ждать пока не закончу"
2. При входе в ХП делать ALTER TABLE table DISABLE TRIGGER, а при выходе ENABLE.
Оба решения чреваты ошибками :-\
...
Рейтинг: 0 / 0
тригер останавливает выполнение процедуры: КАК ИЗБЕЖАТЬ ЭТОГО
    #32022744
izvra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вопрос в том, что если внутри процедуры выполнить вставку в таблицу и если тригер на вставку отменил её , то как сделать так чтоб выполнение процедуры продолжало выполняться, а не прекращалось?
...
Рейтинг: 0 / 0
тригер останавливает выполнение процедуры: КАК ИЗБЕЖАТЬ ЭТОГО
    #32022797
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эта тема уже обсуждалась многократно. Триггер выполняется в рамках своей триггерной транзакции (неяной), которая является вложенной в транзакцию хранимой процедуры. Общая концепция вложенных транзакций MS - при откате любой вложенной транзакции откатываются все внешние, даже если они подтвердились. Если такое положение дел не устраивает, придумывай обходные пути. А именно, отменить вставку можно не только откатом транзакции, но и удалением только что вставленной записи...
...
Рейтинг: 0 / 0
тригер останавливает выполнение процедуры: КАК ИЗБЕЖАТЬ ЭТОГО
    #32022836
MadDog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 izvra:
Вам, все-таки, следует поупражняться с instead of триггерами.
...
Рейтинг: 0 / 0
тригер останавливает выполнение процедуры: КАК ИЗБЕЖАТЬ ЭТОГО
    #32022883
izvra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2Garya & 2MadDog Спасибо!!!

Оба варианта вполне подходят.

Только одна проблема
@@rowcount в обоих варианах начинает очень жестоко врать

Insert into tab1(c1,c2) values(1,'no')
If @rowcount <> 1
Print 'error'
Else
Print 'ok'

эта конструкция теперь не работает корректно, а хотелось бы чтоб для пользователя работа с такой таблицей ничем не отличалась бы, от работы с таблицей без тригеров.

Поделитесь опытом, буду признателен!.
...
Рейтинг: 0 / 0
тригер останавливает выполнение процедуры: КАК ИЗБЕЖАТЬ ЭТОГО
    #32022890
MadDog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 izvra:
Почитайте BOL.
...
Рейтинг: 0 / 0
тригер останавливает выполнение процедуры: КАК ИЗБЕЖАТЬ ЭТОГО
    #32022896
GorM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Выдержки из 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
-----------------------------------
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / тригер останавливает выполнение процедуры: КАК ИЗБЕЖАТЬ ЭТОГО
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]