T-SQL(SQL Server 2016)在插入时触发列值更改
我正在从事我的SSIS项目。我已经成功地将一些csv加载到我的数据库中(通过VS中的集成服务),现在我正在尝试在数据库中创建触发器 我想做的就是:当第二条路的列数为-1时,我想把它改成6。我想在插入过程中触发 我的触发器代码在SSMS中似乎调试正常!但是,当我稍后再次尝试插入csv时,带有T-SQL(SQL Server 2016)在插入时触发列值更改,sql,sql-server,triggers,Sql,Sql Server,Triggers,我正在从事我的SSIS项目。我已经成功地将一些csv加载到我的数据库中(通过VS中的集成服务),现在我正在尝试在数据库中创建触发器 我想做的就是:当第二条路的列数为-1时,我想把它改成6。我想在插入过程中触发 我的触发器代码在SSMS中似乎调试正常!但是,当我稍后再次尝试插入csv时,带有-1的second_road_class列保持原样 触发代码: CREATE TRIGGER AccidentsTrigger ON [Accidents] INSTEAD OF INSERT AS BEGIN
-1
的second_road_class
列保持原样
触发代码:
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
谢谢您的帮助。您可以在插入后使用
触发器执行此操作
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
表的示例:这不起作用-而不是
实际上意味着而不是
-没有要更新的行,因为触发器首先触发(并且除非您自己在触发器中插入行,否则不会插入任何行)。“它已编译!”或“它没有使调试器呕吐”~=按预期工作。我确实尝试了很多解决方法。现在我正在研究下面的答案。是否有一个问题,我正在加载到数据库的CSV从VS是一个数据流?似乎有一些调整,在包设置。现在它起作用了。谢谢你的帮助!显然还有一些事情我不能处理。触发器为多行返回以下错误(但对于单行插入工作正常)子查询返回的值超过1。当子查询在=、!=、=或者当子查询用作表达式时。
@MrDiaman我不认为错误来自上面的触发器,因为没有子查询返回任何值。检查insert语句或使用可返回多个值的子查询的其他触发器。