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

如何让SQL Server 2019设置compatibility_level 110后完全兼容SQL Server 2012?

让SQL Server 2019完全模拟SQL Server 2012行为的解决方案

1. 确认并锁定数据库兼容级别

你已设置compatibility_level = 110,可再次执行语句确保配置生效:

ALTER DATABASE [你的数据库名] SET COMPATIBILITY_LEVEL = 110;
GO

2. 配置查询优化器的旧版行为

兼容级别仅控制部分行为,需额外调整数据库范围的优化器参数,对齐SQL Server 2012的执行逻辑:

-- 启用SQL Server 2012的基数估计器
ALTER DATABASE SCOPED CONFIGURATION SET LEGACY_CARDINALITY_ESTIMATION = ON;
-- 将查询优化器兼容级别设为110(匹配SQL Server 2012)
ALTER DATABASE SCOPED CONFIGURATION SET QUERY_OPTIMIZER_COMPATIBILITY_LEVEL = 110;
-- 禁用严格检查,允许旧版语法与行为
ALTER DATABASE SCOPED CONFIGURATION SET DISABLE_STRICT_CHECKS = ON;
GO

3. 模拟TRIM函数的不支持行为

SQL Server 2019的实例级别会默认支持TRIM函数,不受兼容级别限制。要模拟SQL Server 2012(无TRIM函数)的报错效果,可在目标数据库中创建同名用户定义函数触发错误:

CREATE FUNCTION dbo.TRIM(@input VARCHAR(MAX))
RETURNS VARCHAR(MAX)
AS
BEGIN
    RAISERROR('TRIM function is not supported in SQL Server 2012', 16, 1);
    RETURN NULL;
END;
GO

执行后调用SELECT TRIM(' FOO ')会抛出错误,与SQL Server 2012行为一致。若需恢复正常使用TRIM,删除该函数即可:

DROP FUNCTION dbo.TRIM;
GO

4. 对齐数据库默认配置

确保数据库基础选项与SQL Server 2012默认值一致:

ALTER DATABASE [你的数据库名] SET ANSI_NULLS ON;
ALTER DATABASE [你的数据库名] SET QUOTED_IDENTIFIER ON;
ALTER DATABASE [你的数据库名] SET ANSI_PADDING ON;
ALTER DATABASE [你的数据库名] SET ANSI_WARNINGS ON;
ALTER DATABASE [你的数据库名] SET ARITHABORT ON;
GO

内容的提问来源于stack exchange,提问作者Ivan Lex K.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 12:20:02