Помогите с триггером для MSSQL 2000
От: iGrog Финляндия  
Дата: 09.09.10 09:45
Оценка:
Я не силен в БД, и в триггерах особенно.
Надо сделать так, что бы триггер отрабатывал и на многострочный UPDATE (UPDATE, который затрагивает сразу много строк).

Сейчас он выглядит так и работает только если обновлять строку по одной:


DECLARE @newid INT
    DECLARE @brutto money
    DECLARE @discount money
    DECLARE @ean NVARCHAR(13)
    SELECT @newid=id FROM inserted
    SELECT @ean = [ean] FROM inserted
    SELECT @brutto = [brutto] FROM inserted
    SELECT @discount = [discount_percent] FROM inserted

IF UPDATE(discount_percent)
    BEGIN
        UPDATE FirstTable
        SET discount = brutto - (brutto*@discount/100)
        WHERE id = @newid
        
        IF ((SELECT COUNT(*) FROM SecondTable
            WHERE Product_ID = @ean) > 0)
        BEGIN
            UPDATE SecondTable
            SET Discount=@discount
            WHERE Product_ID = @ean
        END
        ELSE
        BEGIN
            IF (@discount > 0)
            BEGIN
                INSERT INTO SecondTable
                (Product_ID, Quantity, Discount) VALUES (@ean, 1, @discount)
            END
        END
    END


Структура старая и мне её никак не изменить. Код тоже достался в наследство
Смысл действа такой, что если поменялась скидка — пересчитать окончательную сумму со скидкой в одной таблице,
и обновить/добавить запись относительно скидки на этот товар в другой таблице.

Если первый UPDATE я еще понимаю как сделать:

        UPDATE FirstTable
        SET discount = brutto - (brutto*@discount/100)
        WHERE id IN (SELECT id FROM inserted)


то как мне сделать проверку на существование соответствующих записей во второй таблице и обновлении её (или добавлении туда отсутствующих записей)?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.