I have this trigger:
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
as he suggests, the trigger automatically calculates the Derived attribute "Age" from the date of birth. But I get this error when I insert:
(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.
I initially avoided this error because the rows were updated in addition to the error. But now, when I insert a record from FORNT END, the record is not updated. Instead, it throws this exception: 
Can anyone help me out?
btw, my SQL Server 2008 R2 and Visual Studio 2010.
CORRECTION . Records are still being updated. But the Exception is Vilan.
Update
CREATE TRIGGER [dbo].[DeriveTheAge] ON [dbo].[Student] FOR INSERT, UPDATE AS BEGIN UPDATE s SET Age = DATEDIFF(YEAR, [Date of Birth], CURRENT_TIMESTAMP) FROM dbo.Student AS s INNER JOIN inserted AS i ON s.[Student ID] = i.[Student ID] WHERE i.[Date of Birth] IS NOT NULL; commit transaction END GO
source share