如何在MSSQL Server的Insert操作前执行自定义查询
问题根因
INSTEAD OF INSERT触发器的作用是完全替代用户发起的原始插入操作,数据库不会自动执行原INSERT语句,所有写入逻辑都需要在触发器内部手动实现。你当前的代码只写了硬编码插入trigger记录的逻辑,没有处理用户原本要插入的内容,因此原Insert记录会丢失。
修正方案
方案1:保留INSTEAD OF触发器
如果确实需要在原始插入执行前完成自定义操作,只需在触发器中额外将inserted系统临时表(存储本次请求要插入的所有数据)的内容写入目标表即可,修正代码如下:
ALTER Trigger [dbo].[trgExLogTest] on [dbo].[tbl_ExLog] Instead of Insert as begin -- 此处放置你需要提前执行的查询/操作逻辑 insert into tbl_ExLog (ActionName) values('trigger') -- 手动写入用户原本要插入的内容 insert into tbl_ExLog (ActionName) select ActionName from inserted end
如果表存在多个字段,将对应字段补充到插入列和查询列中即可。
方案2:改用AFTER INSERT触发器
如果你的自定义逻辑不需要拦截、修改原始插入内容,只是需要在插入动作触发时额外执行逻辑,可以直接使用AFTER INSERT触发器,这类触发器会在原始插入完成后自动执行自定义逻辑,无需手动处理原始数据的写入,示例代码如下:
ALTER Trigger [dbo].[trgExLogTest] on [dbo].[tbl_ExLog] AFTER Insert as begin -- 此处直接放置你要执行的额外逻辑即可 insert into tbl_ExLog (ActionName) values('trigger') end
内容的提问来源于stack exchange,提问作者Himanshu Aggarwal
相关产品推荐
相关产品推荐

