2014-06-22 2 views
0

작업 아무도가 작동하지 않습니다,하지만 난 해달라고하지 왜, 그렇지 않으면 .. 모든 사람이 나를 도와 :SQL 서버 트리거 알고 난이 두 트리거가있는

삽입 :

CREATE TRIGGER [dbo].[afterInsert] 

ON [dbo].[LinhasVenda] 

FOR INSERT 

AS 

BEGIN 
    DECLARE 
     @IdVenda INT, 
     @PrecoTotalSIva MONEY, 
     @PrecoTotalCIva MONEY 
    SELECT 
     @PrecoTotalSIva = PrecoTotalSIva, 
     @PrecoTotalCIva = PrecoTotalCIva 
    FROM 
     INSERTED 
    UPDATE Vendas SET ValorSIva = ValorSIva + @PrecoTotalSIva, 
    ValorCIva = ValorCIva + @PrecoTotalCIva WHERE 
    IdVenda = @IdVenda 
END 

삭제 :

CREATE TRIGGER afterDelete 

ON LinhasVenda 

FOR DELETE 
AS 
BEGIN 
    DECLARE 
     @IdVenda INT, 
     @IdArtifo INT, 
     @PrecoTotalSIva MONEY, 
     @PrecoTotalCIva MONEY 

    SELECT 
     @PrecoTotalSIva = PrecoTotalSIva, 
     @PrecoTotalCIva = PrecoTotalCIva 
    FROM 
     DELETED 

    UPDATE Vendas SET ValorSIva = ValorSIva - @PrecoTotalSIva, 
    ValorCIva = ValorCIva - @PrecoTotalCIva WHERE 
    IdVenda = @IdVenda 
END 
+0

"작동하지 않습니다"는 정확하지 않습니다. 정확히 무엇이 잘못 될까요? –

답변

0

두 트리거 모두 두 가지 결함이 있습니다. WHERE 절에 사용 된 @IdVenda 값이 SELECT 문에 의해 지정되지 않습니다. 또한 이러한 트리거는 다중 행 INSERT/UPDATE 문과 함께 작동하지 않습니다. 나는 당신이 INSERTED/DELETED에 참여하는 것을 제안하는데, 이것은 두 가지 문제를 다룰 것이다. 다음은 LinhasVenda 테이블의 열 이름이 IdVenda 인 경우를 가정 한 예입니다.

CREATE TRIGGER [dbo].[afterInsert] 
ON [dbo].[LinhasVenda] 
FOR INSERT 
AS 
BEGIN 

UPDATE v 
SET 
     ValorSIva = v.ValorSIva + i.PrecoTotalSIva 
    , ValorCIva = v.ValorCIva + i.PrecoTotalCIva 
FROM Vendas AS v 
JOIN INSERTED AS i ON 
    i.IdVenda = v.IdVenda; 

END; 
GO 

CREATE TRIGGER afterDelete 
ON LinhasVenda 
FOR DELETE 
AS 
BEGIN 

UPDATE v 
SET 
     ValorSIva = v.ValorSIva - d.PrecoTotalSIva 
    , ValorCIva = v.ValorCIva - d.PrecoTotalCIva 
FROM Vendas AS v 
JOIN DELETED AS d ON 
    d.IdVenda = v.IdVenda; 
END; 
GO 
+0

정말 많이, 너는 mt 인생을 저장 :) – SaPires