SQL插入时修改inserted表空值的触发器编写问题
问题原因
- SQL Server 触发器中的
inserted是只读系统临时表,仅用于读取触发时的新写入数据,不支持直接修改表内字段值,这就是你运行代码报错的核心原因 - 你当前的变量赋值写法仅支持单行插入场景,一次性插入多行数据时只能读取到最后一行的
SECUENCIA和ID_PERSONA值,会出现逻辑错误 - 声明
@ID_PERSONA时VARCHAR未指定长度,默认长度为1,会导致字段值被截断
修复方案
instead of insert触发器需要手动完成最终写入逻辑,直接读取inserted数据处理后插入目标表即可,参考代码如下:
ALTER TRIGGER [trigger1] on [dbo].[table] INSTEAD OF INSERT AS BEGIN -- 请将下方的[其余字段名]替换为你的表中除SECUENCIA、ID_PERSONA外的其余实际字段 INSERT INTO [dbo].[table] (SECUENCIA, ID_PERSONA, [其余字段名]) SELECT ISNULL(SECUENCIA, NEXT VALUE FOR SEQ_BIOINTEG), ID_PERSONA, [其余对应字段] FROM inserted END
注意事项
- 插入语句的字段列表和SELECT后的字段顺序要完全对应
- 该写法支持批量插入操作,不会出现多行插入处理异常的问题
内容的提问来源于stack exchange,提问作者Nicolas Goyano
相关产品推荐
相关产品推荐

