Здравствуйте, iGrog, Вы писали:
G>Я не силен в БД, и в триггерах особенно. G>Надо сделать так, что бы триггер отрабатывал и на многострочный UPDATE (UPDATE, который затрагивает сразу много строк).
Посмотрите на следующий код может он поможет решить проблему.
DECLARE @newid INT
DECLARE @brutto money
DECLARE @discount money
DECLARE @ean NVARCHAR(13)
IF UPDATE(discount_percent)
BEGIN
DECLARE inserted_Cursor CURSOR LOCAL READ_ONLY FORWARD_ONLY
FOR SELECT id,[ean],[brutto],discount_percent]
FROM inserted
ORDER BY id
OPEN inserted_Cursor
FETCH NEXT FROM inserted_Cursor INTO @newid,@ean,@brutto,@discount
WHILE (@@FETCH_STATUS = 0) AND (@RetCode=0)
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
FETCH NEXT FROM inserted_Cursor INTO @newid,@ean,@brutto,@discount
END
END