我有一个表上有一个插入触发器.如果我在存储过程的一个insert语句中将6000条记录插入到此表中,那么存储过程是否会在插入触发器完成之前返回?
只是为了确保我正确思考,触发器应该只被调用(我知道'被称为'不是正确的词),因为只有一个插入语句,对吧?
我的主要问题是:即使触发器没有完成,sproc会完成吗?
您的插入触发器将对整个insert语句运行一次.这就是为什么使用inserted
临时表来查看实际插入的内容很重要的原因,而不仅仅是选择最近的单个记录,或类似的东西.
我刚刚测试了一个插入和更新触发器,实际上,它们被认为是sql server插入的一部分.在触发器完成之前,该过程将无法完成.
触发器是调用它们的事务的一部分.
关于触发器的一个重要事项是你必须注意的是触发器为每个事务触发一次(在SQl服务器的kleast中,你应该检查其他dbs,但即使它将逐行处理,这通常是一个糟糕的想法) ,因此,如果您插入6000条记录,则触发器会触发一次而不是6000次.很多人都没有意识到这一点,并且编写触发器就好像它们将一次处理多个记录插入一条记录一样.这不是真的,您的触发器必须考虑处理多个记录插入.