Форум: "Базы";
Текущий архив: 2002.09.19;
Скачать: [xml.tar.bz2];
ВнизКурсоры в триггерах Найти похожие ветки
← →
nikolo (2002-08-28 17:59) [0]Hi! Проблема: у меня триггер на таблицу Х1 on insert, в котором есть курсор. В теле триггера идет вставка записей в таблицу Х2. Я открываю курсор, делаю в цикле вставку, по выходу из цикла закрываю курсор. И все замечательно, если только не сваливается эта самая вставка. И тогда остается открытым курсор.
Есть ли какие-то средства в Transact-SQL, которыми можно отловить этот Exception и закрыть курсор. Короче, что-то вроде try finally в Delphi?
Или может быть можно при входе в триггер как-то проверить открыт курсор или нет и если открыт, то закрыть его?
← →
Polevi (2002-08-28 18:35) [1]SET CURSOR_CLOSE_ON_COMMIT ON
← →
Polevi (2002-08-28 18:38) [2]а лучше использовать локальные курсоры
DECLARE cursor_name CURSOR
[ LOCAL | GLOBAL ]
[ FORWARD_ONLY | SCROLL ]
[ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ]
[ READ_ONLY | SCROLL_LOCKS | OPTIMISTIC ]
[ TYPE_WARNING ]
FOR select_statement
[ FOR UPDATE [ OF column_name [ ,...n ] ] ]
LOCAL
Specifies that the scope of the cursor is local to the batch, stored procedure, or trigger in which the cursor was created. The cursor name is only valid within this scope. The cursor can be referenced by local cursor variables in the batch, stored procedure, or trigger, or a stored procedure OUTPUT parameter. An OUTPUT parameter is used to pass the local cursor back to the calling batch, stored procedure, or trigger, which can assign the parameter to a cursor variable to reference the cursor after the stored procedure terminates. The cursor is implicitly deallocated when the batch, stored procedure, or trigger terminates, unless the cursor was passed back in an OUTPUT parameter. If it is passed back in an OUTPUT parameter, the cursor is deallocated when the last variable referencing it is deallocated or goes out of scope.
← →
aleksaziat (2002-08-29 16:25) [3]Fetch ststus для курсора а обработать ошибку вставки можно следуюшим образом
insert X2 values(1,1,1,1,1)
if @@error <> 0
goto LB_Error_Ins
LB_Error_Ins:
ну и здесь уже обработка
чтот вот такое должно получится
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.09.19;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.016 c