Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.09.19;
Скачать: CL | DM;

Вниз

Курсоры в триггерах   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.01 c
4-61356
ACR
2002-07-29 14:27
2002.09.19
синхронизироваться с горизонтальной разверткой ?


14-61257
zzet
2002-08-22 18:44
2002.09.19
Не программирование.


3-61031
Маша
2002-08-30 10:45
2002.09.19
Подскажите , PLS


3-60955
BF7ru
2002-08-27 14:46
2002.09.19
Имя таблицы в переменной


6-61231
snoup
2002-07-16 16:15
2002.09.19
Привет! Как программно послать SMS на какую-нить мобилу!!!