Rodger007x Ответов: 2

Как использовать триггер для обновления другой таблицы


tblBudget(butID, butName, butAmount,IncurredTD_Amount)
tblInvoice(ID, ItemName,InvoiceAmount,butID)
вот мои две таблицы, когда я обновляю таблицу счетов-фактур, у меня будет триггер при любой вставке или обновлении счета-фактуры, который уменьшит бюджетную сумму intblbutget, а также увеличит Incretdamount автоматически, используя butID в качестве ссылки в tblInvoice(butAmount-InvoiceAmount и Incurreddamount+INvoiceAmount)..... возможно ли это? каковы проблемы с производительностью, если они вообще есть? как это можно сделать ... заранее спасибо на миллион

Что я уже пробовал:

AFTER INSERT,  UPDATE
AS
BEGIN
       SET NOCOUNT ON;
 
       DECLARE @Inv_Amount float,@Bud_ID int
 
       SELECT @Bud_ID = INSERTED.Bud_ID       
       FROM INSERTED
 
       INSERT INTO dbo.tblBudget(Bud_Amount,IncurTD_Amount,ID) IncurTD_Amount
       VALUES(Bud_Amount - @Inv_Amount, IncurTD_Amount + @Inv_Amount,'Inserted')
END
но я получаю ошибку:

0x01AA

Кажется, возникла проблема с отправкой сообщения об ошибке, я вижу только "но я получаю ошибку:". имеет смысл добавить сообщение об ошибке ;)

Richard Deeming

Вставки, обновления и удаления могут затрагивать более одной строки. Когда они это делают, триггер срабатывает один раз для каждого оператора, и inserted и deleted виртуальные таблицы будут содержать несколько строк. Ваш триггер должен использовать обработку на основе набора, чтобы справиться с этим.

Кроме того, ваш INSERT утверждение не является действительным. Я не уверен, что это опечатка в вашем вопросе?

2 Ответов

Рейтинг:
1

Rodger007x

его complaninig о имени coloumn, которое не совпадает в операторе insert:

Msg 207, Level 16, State 1, Line 1

что невозможно, так как я ссылаюсь на правильную таблицу, но я думаю, что не слишком хорошо разбираюсь в SQL. Может быть, подойдет временный стол? не знаю.....


RickZeeland

Пожалуйста, используйте кнопку комментарий, чтобы добавить комментарии.
Видите ли вы больше информации об ошибках ? может быть какое-то ограничение, что поле должно быть уникальным (часто используется в поле ID).

Рейтинг:
0

RickZeeland

CREATE TRIGGER TR_Budget ON [dbo].[tblInvoice] 
	FOR INSERT, UPDATE
	AS
	BEGIN
          -- your code here, update tblBudget
	END