You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server兼容级别170下触发器用变量触发会话终止错误

问题分析与解决建议

问题场景

该问题仅特定于兼容级别170的SQL Server 2025 CU5环境:
当在INSTEAD OF UPDATE触发器中使用局部变量关联大表(200+列、10万+行的TC表)时,执行无实际数据修改的UPDATE语句(如SET bearer = bearer),会触发严重会话终止错误:

Msg 596, Level 21, State 1, Line 24
无法继续执行,因为会话处于终止状态。

Msg 0, Level 20, State 0, Line 24
当前命令发生严重错误。如有结果,应予以丢弃。

复现代码

触发器代码:

CREATE OR ALTER TRIGGER CH_REPRO 
ON CH 
INSTEAD OF UPDATE
AS 
BEGIN
    DECLARE @cirObj INT = 101;

    SELECT U.cir
    FROM inserted AS I
    LEFT JOIN TC AS U ON U.cir = I.itemno
                      AND I.objectno = @cirObj;
END;

触发错误的更新语句:

UPDATE CH 
SET bearer = bearer;

CH表定义(经测试与问题无关):

DROP TABLE IF EXISTS CH;

CREATE TABLE CH 
(
    bcport int,
    channel int,
    bearer int,
    objectno int,
    itemno int
);

INSERT INTO CH (bcport, channel, bearer, objectno, itemno) VALUES(31,1,999,null,null);

无需重写触发器的临时解决方法

以下任一操作可直接消除错误:

  • 将触发器中的局部变量@cirObj替换为硬编码整数(如直接写101)
  • 用(SELECT * FROM TC)子查询或CTE替代直接引用TC表
  • 将数据库兼容级别降至160或更低

关于Bug报告

目前公开渠道暂未查询到针对该特定场景的官方Bug记录,但鉴于问题在多数据库环境中可稳定复现,且仅出现在兼容级别170下,建议通过Microsoft SQL Server官方支持渠道提交反馈,提供完整复现脚本与环境信息以推动官方修复。

内容的提问来源于stack exchange,提问作者Simon M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.06 11:03:09