相关疑难解决方法(0)

交易以触发结束.批次已中止.派生属性

我有这个触发器:

CREATE trigger [dbo].[DeriveTheAge] on [dbo].[Student]
after insert,update
as
begin
    declare @sid as int;
    declare @sdate as date;
    select @sid= [Student ID] from inserted;
    select @sdate=[Date of Birth] from inserted;
    commit TRANSACTION
    if(@sdate is not null)
    begin
        update Student set Age=DATEDIFF(YEAR,@sdate,GETDATE()) where [Student ID]=@sid;
    end
    print 'Successfully Done'
end
Run Code Online (Sandbox Code Playgroud)

如它所示,触发器会自出生日期起自动计算派生属性"年龄".但是当我执行插入操作时出现此错误:

(1 row(s) affected)
Successfully Done
Msg 3609, Level 16, State 1, Line 1
The transaction ended in the trigger. The batch has been aborted.
Run Code Online (Sandbox Code Playgroud)

最初我避免了这个错误,因为尽管出现错误,行仍在更新.但是现在当我从FORNT END插入记录时,记录不会更新.相反,它会抛出此异常:在此输入图像描述

有人可以帮帮我吗?

顺便说一句,我的是SQL Server 2008 …

sql-server triggers derived visual-studio-2008

2
推荐指数
1
解决办法
2万
查看次数