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

如何以编程方式确定SQL Server实例的最高或默认兼容级别?

如何编程确定SQL Server实例的最高兼容级别并设置为实例默认值

一、确定实例支持的最高/默认兼容级别

实例的默认兼容级别等同于model系统数据库的兼容级别(model是所有新建数据库的模板库,其级别由实例版本直接决定),直接查询即可:

SELECT compatibility_level AS instance_default_compatibility_level
FROM sys.databases 
WHERE name = 'model';

这个方法比解析版本号更可靠,无需维护版本映射规则,能适配所有SQL Server版本。

二、批量将数据库兼容级别设为实例默认值

可以通过动态SQL实现,自动获取实例默认级别并应用到目标数据库:

-- 1. 获取实例默认兼容级别
DECLARE @default_compat INT;
SELECT @default_compat = compatibility_level 
FROM sys.databases 
WHERE name = 'model';

-- 2. 定义要处理的数据库(排除系统库,可按需调整)
DECLARE @db_list TABLE (db_name NVARCHAR(128));
INSERT INTO @db_list
SELECT name 
FROM sys.databases 
WHERE name NOT IN ('master', 'model', 'msdb', 'tempdb')
  AND state_desc = 'ONLINE'; -- 仅处理在线数据库

-- 3. 遍历数据库并更新兼容级别
DECLARE @current_db NVARCHAR(128);
DECLARE db_cursor CURSOR FOR SELECT db_name FROM @db_list;

OPEN db_cursor;
FETCH NEXT FROM db_cursor INTO @current_db;

WHILE @@FETCH_STATUS = 0
BEGIN
    DECLARE @sql NVARCHAR(MAX);
    SET @sql = N'ALTER DATABASE ' + QUOTENAME(@current_db) + N' SET COMPATIBILITY_LEVEL = ' + CAST(@default_compat AS NVARCHAR(10)) + N';';
    EXEC sp_executesql @sql;
    
    FETCH NEXT FROM db_cursor INTO @current_db;
END

CLOSE db_cursor;
DEALLOCATE db_cursor;

注意事项

  • 执行此脚本需要ALTER ANY DATABASE或对应数据库的ALTER DATABASE权限
  • 更改兼容级别后,建议检查数据库兼容性:
    • 用sys.dm_db_persisted_sku_features查看依赖旧版本特性的对象
    • 运行业务查询测试,确保现有逻辑不受影响
  • 该脚本会自动适配不同版本的SQL Server实例,不会强制设置超出实例支持的级别,完全兼容旧版SQL Server客户的环境

内容的提问来源于stack exchange,提问作者Emperor Eto

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 16:32:34