SQL Server触发器不工作
我有两个触发器,没有人在工作,但我不知道为什么,难道每个人都不能帮我吗: 插入:SQL Server触发器不工作,sql,sql-server,events,triggers,Sql,Sql Server,Events,Triggers,我有两个触发器,没有人在工作,但我不知道为什么,难道每个人都不能帮我吗: 插入: CREATE TRIGGER [dbo].[afterInsert] ON [dbo].[LinhasVenda] FOR INSERT AS BEGIN DECLARE @IdVenda INT, @PrecoTotalSIva MONEY, @PrecoTotalCIva MONEY SELECT @PrecoTotalSI
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
两个触发器都有两个缺陷。SELECT语句未分配WHERE子句中使用的@IdVenda值。此外,这些触发器不适用于多行INSERT/UPDATE语句。我建议您加入Insert/Delete,这将解决这两个问题。下面是一个示例,假设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
“不起作用”不够精确,到底出了什么问题?太多了,你救了mt的命:)