У меня есть этот триггер:
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
Как и предполагалось, триггер автоматически вычисляет производный атрибут «Возраст» по дате рождения.Но я получаю эту ошибку, когда выполняю вставку:
(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.
Изначально я избегал этой ошибки, потому что строки обновлялись, несмотря на ошибку.Но теперь, когда я вставляю запись из FORNT END, запись не обновляется.Вместо этого он выдает это исключение:
Кто-нибудь может мне помочь?
Кстати, у меня есть SQL Server 2008 R2 и Visual Studio 2010.
ИСПРАВЛЕНИЕ : Записи все еще обновляются.Но исключением является Вилан.
Обновление
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