首先明确触发器类型:
for=after 相同,操作后
AFTER 指定触发器仅在触发 SQL 语句中指定的所有操作都已成功执行时才被触发
instead of 操作前
指定执行 DML 触发器而不是触发
在要得到表中TEXT等字段类型的时候,只能使用instead of 触发器,
这个时候要重写对应DML语句:
比如:
if exists(select 1 from inserted)
BEGIN
--因为替换为instead of 模式,所以对应数据要重新插入和删除
--insert into T select * from inserted
END
if exists(select 1 from deleted)
BEGIN
--因为替换为instead of 模式,所以对应数据要重新插入和删除
delete from t where logid in(select logid from deleted)
END
上面
--insert into T select * from inserted
对于表中有identity 字段的,会发现变量你没有从inserted中取到数据,
所以在 insert之后需要再次取得这个表当前的ID:
示例: