T-SQL(SQL Server 2016)触发列值更改,在插入
问题描述:
我正在开发一个我的SSIS项目。我已经成功地将一些CSV加载到我的数据库中(通过VS中的Integration Services),现在我正试图在数据库中创建一个触发器。T-SQL(SQL Server 2016)触发列值更改,在插入
我想要发生的事情是:当列second_road_class
的列数为-1时,我希望它变成6.我希望触发器在插入过程中触发。
我的触发器代码似乎在SSMS中调试正常!但是当我稍后尝试再次插入csv时,second_road_class
列与-1
保持原样。
触发代码:
CREATE TRIGGER AccidentsTrigger
ON [Accidents]
INSTEAD OF INSERT
AS BEGIN
SET NOCOUNT ON
IF (SELECT [second_road_class] FROM INSERTED) LIKE '-1'
BEGIN
UPDATE [Accidents]
SET [second_road_class] = '6'
WHERE [second_road_class] = '-1'
END
END
感谢您的帮助。
答
你可以用after insert
触发器来做到这一点。
create trigger accidentstrigger on [accidents]
after insert as
begin;
set nocount on;
if exists (select 1 from inserted where [second_road_class] = '-1')
begin;
update a
set [second_road_class] = '6'
from [accidents] as a
inner join inserted i
/* change AccidentId to the Primary Key on accidents*/
on a.AccidentId = i.AccidentId
and i.[second_road_class] = '-1';
end;
end;
go
使用上rextester的pilots
表举例:http://rextester.com/XKX10184
这不起作用 - 'INSTEAD OF'的真正含义'INSTEAD OF' - 没有行更新,因为触发器触发第一个(没有行将永远被插入,除非你自己将该行插入到触发器中)。 “它编译!”或“它没有使调试器barf”〜=按预期工作。 –
我真的尝试了很多解决方法。现在我正在回答下面的问题 – Diaman