SERVERPROPERTY('ProductLevel') 返回SQL Server的SP/CU标识(如'SP3'、'CU12'或空字符串),不反映具体KB补丁;查KB编号应使用SERVERPROPERTY('ProductUpdateLevel'),其返回'KBxxxxxxx'格式,但需SQL Server 2012 SP4+等版本且补丁通过标准安装包部署。

SERVERPROPERTY('ProductLevel') 返回的是 SQL Server 的 Service Pack 级别,不是补丁版本(如 KB 编号);要查具体安装的补丁,得用 SERVERPROPERTY('ProductUpdateLevel') 或结合 Windows 更新日志。
SERVERPROPERTY('ProductLevel') 只显示 SP/CU 标识,不反映热修复
这个值返回类似 'SP3'、'CU12' 或空字符串(RTM),但它只是 SQL Server 安装程序打上的“标记”,不保证与实际二进制文件一致。尤其在手动应用单个 KB 补丁后,ProductLevel 通常不会更新。
- RTM 实例打完 CU5 后,
SERVERPROPERTY('ProductLevel')仍可能返回''(空字符串) - 安装了 KB5008996(2022 年 1 月 CU)后,
ProductLevel仍显示'CU12'—— 因为 CU12 是它所属的累积更新系列名,不是 KB 编号 - 该属性无法区分同一 CU 下不同 KB 的组合安装顺序
真正能查到 KB 编号的是 SERVERPROPERTY('ProductUpdateLevel')
SQL Server 2012 SP4+ 和 2014 SP3+ 开始支持这个属性,返回格式为 'KBxxxxxxx' 或 'KBxxxxxxx Cumulative Update x',前提是补丁是通过标准安装包(.exe/.msu)安装且注册表被正确更新。
- 执行:
SELECT SERVERPROPERTY('ProductUpdateLevel') AS [AppliedKB] - 若返回
NULL,说明实例太老(HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQLxx.MSSQLSERVER\Setup - 注意:它只返回「最新一次」安装的 KB,不是全部已安装 KB 列表
想看完整补丁历史?得绕道 Windows 系统层
SQL Server 自身不维护补丁时间线,SERVERPROPERTY 系列函数也不提供列表能力。可靠方式是查 Windows 更新记录:
- 在服务器上运行 PowerShell:
Get-HotFix | Where-Object {$_.Description -eq 'Update'} | Sort-Object InstalledOn -Descending - 筛选关键词:
KB500、SQL、2019等,重点关注InstalledOn和HotFixID - 对应 SQL Server 实例的补丁通常带
SQLServer或版本号(如2019)在描述中;但 KB5008996 这类通用 .NET/OS 依赖补丁也会影响 SQL Server 行为,不能忽略
靠 SERVERPROPERTY 拿不到完整补丁视图——它只是快照,不是日志。真要审计合规性,必须把 ProductUpdateLevel、Windows Get-HotFix、SQL Server 错误日志里的启动版本号(SQL Server is starting at version xxxxx)三者交叉比对。











