T-SQL(SQL Server 2016)触发列值更改,在插入

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 

感谢您的帮助。

+0

这不起作用 - 'INSTEAD OF'的真正含义'INSTEAD OF' - 没有行更新,因为触发器触发第一个(没有行将永远被插入,除非你自己将该行插入到触发器中)。 “它编译!”或“它没有使调试器barf”〜=按预期工作。 –

+0

我真的尝试了很多解决方法。现在我正在回答下面的问题 – Diaman

你可以用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

+0

还没有。是否有一个问题,我是从数据流从VS IS加载到数据库的CSV? – Diaman

+1

@MrDiaman如果您手动插入记录,它可以工作吗? – SqlZim

+0

似乎必须在软件包设置中进行一些调整。现在它可以工作。感谢您的帮助! – Diaman