首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

快速判斷 MSSQL 版本(2000/2005/2008/2012+)的多種方法

     編輯:關於SqlServer

前言

在維運、遷移、相容性測試時,常需快速確認目標 SQL Server 執行個體的確切版本。本文整理 6 種方法,從 T-SQL 查詢、系統檢視、命令列工具到登錄檔,涵蓋 SQL Server 2000 至最新版本,並說明各方法適用情境與注意事項。

方法一:@@VERSION 全域變數(最常用、資訊最完整)

SELECT @@VERSION;

輸出範例

  • SQL Server 2000:
    Microsoft SQL Server  2000 - 8.00.2039 (Intel X86)
    May  3 2005 23:18:38
    Copyright (c) 1988-2003 Microsoft Corporation
    Desktop Engine on Windows NT 5.2 (Build 3790: Service Pack 2)
  • SQL Server 2005 SP4:
    Microsoft SQL Server 2005 - 9.00.5000.00 (X64)
    Dec 10 2010 10:42:52
    Copyright (c) 1988-2005 Microsoft Corporation
    Standard Edition (64-bit) on Windows NT 6.1 (Build 7601: Service Pack 1)
  • SQL Server 2019 CU15:
    Microsoft SQL Server 2019 (RTM-CU15) (KB5018782) - 15.0.4198.2 (X64)
    Jan 14 2023 08:30:12
    Copyright (c) 2019 Microsoft Corporation
    Developer Edition (64-bit) on Windows Server 2019 Datacenter 10.0 (Build 17763: )

關鍵欄位解讀

部分說明
版本年份2000 / 2005 / 2008 / 2012 / 2014 / 2016 / 2017 / 2019 / 2022
Build Number8.00.xxxx=2000, 9.00.xxxx=2005, 10.00.xxxx=2008, 10.50.xxxx=2008 R2, 11.00.xxxx=2012, 12.00.xxxx=2014, 13.00.xxxx=2016, 14.00.xxxx=2017, 15.00.xxxx=2019, 16.00.xxxx=2022
平台(Intel X86) = 32-bit, (X64) = 64-bit, (IA64) = Itanium
版本Enterprise/Standard/Developer/Express/Web/Workgroup
作業系統Windows 版本與 Service Pack

方法二:SERVERPROPERTY 函數(結構化、適合程式判斷)

SELECT
    SERVERPROPERTY('ProductVersion')      AS ProductVersion,   -- 如 15.0.4198.2
    SERVERPROPERTY('ProductLevel')        AS ProductLevel,     -- RTM / SP1 / SP2 / CU...
    SERVERPROPERTY('Edition')             AS Edition,          -- Enterprise/Standard/Express...
    SERVERPROPERTY('EngineEdition')       AS EngineEdition,    -- 2=Standard, 3=Enterprise, 4=Express, 5=SQL Database, 8=Managed Instance
    SERVERPROPERTY('ProductMajorVersion') AS MajorVersion,     -- 15 (2019), 14 (2017), 13 (2016)...
    SERVERPROPERTY('ProductMinorVersion') AS MinorVersion,
    SERVERPROPERTY('ProductBuild')        AS BuildNumber,
    SERVERPROPERTY('ProductBuildType')    AS BuildType,        -- RTM / SP / CU / GDR
    SERVERPROPERTY('ProductUpdateLevel')  AS UpdateLevel,      -- CU 版次
    SERVERPROPERTY('ProductUpdateReference') AS UpdateRef;      -- KB 編號

優點

  • 回傳標量值,可直接用於 IF 判斷、動態 SQL、應用程式解析。
  • EngineEdition 可區分雲端版本(Azure SQL Database = 5, Managed Instance = 8)。

方法三:系統檢視/資料表(版本特有物件偵測)

原文提到的 sys.servers 僅能區分 2000 vs 2005+。更完整的物件對應表:

物件引入版本用途
sys.servers2005連結伺服器資訊,2000 無此檢視
sys.dm_os_wait_stats2005DMV 基礎,2000 僅有 sysprocesses
sys.partitions2005分區/索引統計,2000 用 sysindexes
sys.sequences2012Sequence 物件
sys.column_store_segments2012Columnstore 索引
sys.external_tables2016PolyBase 外部表
sys.graph_edges / sys.graph_nodes2017圖形資料庫
sys.ledger_tables2022帳本資料表

快速判斷腳本

IF OBJECT_ID('sys.ledger_tables') IS NOT NULL PRINT 'SQL Server 2022+';
ELSE IF OBJECT_ID('sys.graph_edges') IS NOT NULL PRINT 'SQL Server 2017+';
ELSE IF OBJECT_ID('sys.external_tables') IS NOT NULL PRINT 'SQL Server 2016+';
ELSE IF OBJECT_ID('sys.sequences') IS NOT NULL PRINT 'SQL Server 2012+';
ELSE IF OBJECT_ID('sys.dm_os_wait_stats') IS NOT NULL PRINT 'SQL Server 2005+';
ELSE PRINT 'SQL Server 2000 or earlier';

方法四:命令列工具(無需登入資料庫)

sqlcmd / osql

sqlcmd -S localhost -E -Q "SELECT @@VERSION"
osql -S localhost -E -Q "SELECT @@VERSION"  -- SQL 2000/2005 相容

Windows 服務查詢

sc query MSSQLSERVER
sc query "MSSQL$SQLEXPRESS"  -- 具名執行個體

PowerShell (SMO)

[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SMO') | Out-Null
$srv = New-Object Microsoft.SqlServer.Management.Smo.Server 'localhost'
$srv.Information.Version        # 15.0.4198.2
$srv.Information.VersionString  # 2019
$srv.Information.Edition        # Developer Edition (64-bit)

方法五:登錄檔(服務未啟動時可用)

路徑:HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\Setup(路徑含版本代碼)

版本登錄路徑關鍵字版本值
2000MSSQLServer\CurrentVersion8.00.xxxx
2005MSSQL.1\Setup9.00.xxxx
2008MSSQL10.MSSQLSERVER\Setup10.00.xxxx
2008 R2MSSQL10_50.MSSQLSERVER\Setup10.50.xxxx
2012MSSQL11.MSSQLSERVER\Setup11.00.xxxx
2014MSSQL12.MSSQLSERVER\Setup12.00.xxxx
2016MSSQL13.MSSQLSERVER\Setup13.00.xxxx
2017MSSQL14.MSSQLSERVER\Setup14.00.xxxx
2019MSSQL15.MSSQLSERVER\Setup15.00.xxxx
2022MSSQL16.MSSQLSERVER\Setup16.00.xxxx

查詢 PatchLevel 或 Version 值即可得知確切 Build。

方法六:錯誤日誌檔(服務無法啟動時)

檔案:MSSQL\Log\ERRORLOG(或 ERRORLOG.1)

2023-01-15 10:30:00.00 Server      Microsoft SQL Server 2019 (RTM-CU15) (KB5018782) - 15.0.4198.2 (X64)
2023-01-15 10:30:00.00 Server      Copyright (c) 2019 Microsoft Corporation
2023-01-15 10:30:00.00 Server      Developer Edition (64-bit) on Windows Server 2019 Datacenter 10.0 (Build 17763: )

首行即含完整版本資訊,服務掛掉時仍可檢視。

版本號對照速查表

產品版本Major.MinorBuild 範圍主流支援結束延伸支援結束
SQL Server 20008.08.00.xxxx2008-04-082013-04-09
SQL Server 20059.09.00.xxxx2011-04-122016-04-12
SQL Server 200810.010.00.xxxx2014-07-082019-07-09
SQL Server 2008 R210.510.50.xxxx2014-07-082019-07-09
SQL Server 201211.011.00.xxxx2017-07-112022-07-12
SQL Server 201412.012.00.xxxx2019-07-092024-07-09
SQL Server 201613.013.00.xxxx2021-07-132026-07-14
SQL Server 201714.014.00.xxxx2022-10-112027-10-12
SQL Server 201915.015.00.xxxx2025-01-072030-01-08
SQL Server 202216.016.00.xxxx2028-01-112033-01-11

實務建議

  1. 自動化巡檢:使用 SERVERPROPERTY 寫入巡檢資料表,集中管理數百台執行個體版本。
  2. 相容性層級 ≠ 產品版本:資料庫 COMPATIBILITY_LEVEL 可設為舊版本(如 100=2008),但引擎版本仍為新版。勿混淆。
  3. Express 版本辨識:Edition 含 "Express" 字樣,EngineEdition = 4,功能受限(無 Agent、最大 1 GB 記憶體/10 GB 資料/1 CPU)。
  4. Azure SQL 判斷:SERVERPROPERTY('EngineEdition') IN (5,8) 表示雲端服務,無法存取作業系統層面資源。

掌握上述方法,無論在 SSMS、應用程式、自動化腳本、離線維護、災難復原現場,都能在幾秒內精準識別 SQL Server 版本,避免相容性問題與錯誤部署。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved