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

SQL Server 2025兼容级170触发器中外连接用变量触发会话终止错误求助

SQL Server 2025 兼容级别170下触发器外连接含变量引发会话终止错误

在SQL Server 2025兼容级别170的环境中,当触发器内使用外连接且将变量作为连接条件的一部分时,会触发错误提示:
Cannot continue the execution because the session is in the kill state.

可复现问题的代码

DROP TABLE IF EXISTS TC2;
CREATE TABLE [TC2](
    [id_tc2] [int] IDENTITY(1,1) NOT NULL,
    [nme] [nvarchar](50) NOT NULL
 CONSTRAINT [PK_TC2] PRIMARY KEY CLUSTERED 
(   [id_TC2] ASC)
) ON [PRIMARY]
GO

INSERT INTO TC2 (nme)
SELECT 'testing_'+CAST(N.[value] as nvarchar(10))
FROM    GENERATE_SERIES (1,1000) AS N;
GO

CREATE OR ALTER VIEW CH
AS SELECT
    bcport=31, channel=1, bearer=99, objectno = cast(null as int), itemno=cast (null as int);
GO

DROP TABLE IF EXISTS OTHER;
CREATE TABLE OTHER( 
        id_other int identity(1,1)
    ,   id_tc2 int
    ,   bcport int
    ,   whn datetime
    ,   [status] nvarchar(20)
 CONSTRAINT [PK_OTHER] PRIMARY KEY CLUSTERED 
(   [id_other] ASC)
) ON [PRIMARY];
GO

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

    UPDATE  O SET 
                [status]=CASE WHEN U.id_tc2 is null THEN 'unused' ELSE 'used' END
            ,   whn=GETDATE()
    FROM        OTHER AS O
    INNER JOIN  inserted AS I on I.bcport=O.bcport
    LEFT JOIN   TC2 AS U ON 
                U.id_tc2 = I.itemno
                AND I.objectno = @circObj;

    
END;
GO

UPDATE CH SET   bearer = bearer;

临时解决方案

经测试,以下任意一种方式可消除错误:

  • 将数据库兼容级别设置为160或更低;
  • 使用硬编码值替代变量(如将I.objectno=@circObj改为I.objectno=1234);
  • 在连接中使用子查询替代直接引用TC2表(如LEFT JOIN (SELECT * FROM TC2) AS U)。

疑问

Bing AI显示该问题为已知且已修复的Bug,但无法找到相关官方参考资料,且在SQL Server 2025累积更新5(CU5)中仍可复现该问题。询问是否有其他用户遇到过此问题,或了解相关的Bug报告信息。

内容的提问来源于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.09 08:04:51