我有一个使用Entity Framework的C#应用程序,我在数据库中创建了一个触发器,在插入和更新后触发。
我注意到当我使用EF代码插入或更新时触发器不会触发,另一方面,当我通过SQL Server插入或更新时触发器触发
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[updateLoanFinishing]
ON [dbo].[Installments_Paids]
AFTER INSERT, UPDATE, DELETE
AS
BEGIN
DECLARE @totalLoan decimal, @totalpaid decimal, @balance decimal
SELECT @totalLoan = l.Total_Amount
FROM dbo.Loans l
SELECT @totalpaid = ISNULL(SUM(ip.Paid_Amount), 0)
FROM dbo.Installments_Paids ip
SELECT @balance = @totalLoan - @totalpaid
IF @balance = 0
BEGIN
UPDATE dbo.Loans
SET dbo.Loans.IsFinish = 1 -- bit
FROM dbo.Loans l
INNER JOIN INSERTED i ON i.Loan_ID = l.Loan_ID
END
ELSE IF @balance > 0
BEGIN
UPDATE dbo.Loans
SET dbo.Loans.IsFinish = 0 -- bit
FROM dbo.Loans l
INNER JOIN INSERTED i ON i.Loan_ID = l.Loan_ID
END
END
答案 0 :(得分:0)
我相信您的触发器被调用 - 它只是有缺陷且无法正常执行。
看看它:
DECLARE @totalLoan decimal, @totalpaid decimal, @balance decimal
SELECT @totalLoan = l.Total_Amount
FROM dbo.Loans l
你想在这做什么?您有一个名为@TotalLoan
的单一变量,并且您正在为其分配整个Loans
表,Total_Amount
列?该表中只有一行吗?否则,这是不有效作业 - 您无法将整个表格分配给单个变量.....
下一个声明也是如此 - 你再次基本上将整个表分配给一个变量 - 只有不能可能正常工作!
你真的试图在这做什么?您可能需要在语句中添加WHERE
子句,或者您是否计划使用SUM(....)
进行这些任务,或者执行其他操作以使其工作 - 但我很确定此触发器 被调用,它只是不能做你期望它做的事情,因为它有缺陷