В настоящее время я работаю со старым приложением, у которого нет исходного кода, но мне действительно нужно добавить в приложение новую логику.

Единственный способ, который я нашел, - это испортить данные базы данных и изменить все, что мне нужно, с помощью триггера.

Я написал следующий триггер, который должен обновить 2 столбца только что вставленной строки:

CREATE TRIGGER addLoteInfo ON fi
FOR INSERT
AS 
DECLARE
    @loteN          varchar(15),
    @refN           varchar(18),
    @CientifN               varchar(40),
    @CaptureZ       varchar(20)


    declare MY_CURSOR cursor for 
    select   
        i.lote, i.ref
    from inserted i

    open MY_CURSOR

    fetch next from MY_CURSORinto @loteN, @refN

    while @@fetch_status = 0  
    begin 

         SELECT @CientifN = u_ncientif FROM SE where lote LIKE @loteN and ref LIKE @refN;

         SELECT @CaptureZ = u_zcaptura FROM SE where lote LIKE @loteN and ref LIKE @refN;

        UPDATE FI SET LNCIENT=@CientifN, LZCAP=@CaptureZ;

        fetch next from CURSOR_TESTE into @loteN, @refN 

    end 

    close MY_CURSOR
    deallocate MY_CURSOR

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

Невозможно сделать то, что я пытаюсь сделать?

Можете ли вы помочь мне с другим подходом?

0
sakana 2 Янв 2012 в 22:24
Зачем обновлять только что вставленные строки, а не просто вставлять правильные данные для начала?
 – 
Oded
2 Янв 2012 в 22:27
Вставка сделана приложением, и у меня нет доступа к его исходному коду, чтобы изменить его, чтобы включить 2 дополнительных поля.
 – 
sakana
2 Янв 2012 в 22:29
1
Фу. Триггеры + курсоры + отсутствие исходного кода приложения = рецепт боли. Удачи!
 – 
RickNZ
3 Янв 2012 в 07:33

1 ответ

Вам нужно использовать триггер INSTEAD OF, если вы хотите изменить вновь вставленную/обновленную запись на лету.

1
a1ex07 2 Янв 2012 в 22:29