Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
T-SQL(SQL Server 2016)在插入时触发列值更改_Sql_Sql Server_Triggers - Fatal编程技术网

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

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

我正在从事我的SSIS项目。我已经成功地将一些csv加载到我的数据库中(通过VS中的集成服务),现在我正在尝试在数据库中创建触发器

我想做的就是:当第二条路的列数为-1时,我想把它改成6。我想在插入过程中触发

我的触发器代码在SSMS中似乎调试正常!但是,当我稍后再次尝试插入csv时,带有
-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语句或使用可返回多个值的子查询的其他触发器。