Sql-Server

正確確定 SQL Server 版本和更新級別

  • April 15, 2020

我有一些現有程式碼試圖通過使用 WMI 查詢來讀取為特定實例名稱安裝的 SQL Server 的目前版本。它檢查 VERSION 的第一個虛線部分(觸發升級安裝)和 SPLEVEL(觸發更新檔安裝)。到目前為止,這一直運作良好。(我需要能夠以程式方式獲取版本,而無需實際打開與實例的 SQL 連接。)

然而 2017 和 2019 已經取消了服務包,使 SPLEVEL 無用,所以我正在尋找一種替代方法來確定何時只存在較舊的 CU。

根據版本號表,在我應用 CU4 的全新 2019 安裝中,我應該看到 VERSION 為 15.0.4033.1 和 FILEVERSION 為 2019.150.4033.1(實際頁面在後者中有錯字)。

但是,當我看到匹配的 FILEVERSION 時,我看到的 VERSION 仍然是 RTM 值 15.0.2000.5。如果我查看 SQL Server 配置管理器中的高級屬性,也可以確認這一點。(而且 FWIW 我還確認 SPLEVEL 仍然為 0。)

奇怪的是,如果我使用 Management Studio 進行連接,它會顯示版本為 15.0.4033.1。

如果需要,我不介意切換到比較 FILEVERSION,但我擔心的是“GDR Builds”。查看2017 的等效表,似乎沒有任何特定的押韻或原因,並且較新的 GDR 版本的版本號可能低於較舊的 CU 版本。

我怎樣才能理解這一點?什麼是 GDR 版本,它從何而來?假設他們永遠不會“升級”已經應用了一些 CU 的安裝是否安全?

作為這個有趣問題的部分解決方案,我會考慮使用 powershell:

首先,您需要在所需的每台伺服器上安裝 SQL Server PowerShell 模組

Get-SqlAgent -ServerInstance "MY_SERVER"

在此處輸入圖像描述

在上面的圖片中,您可以看到ServerVersion您正在尋找的。

$$ This is only a partial answer, as it doesn’t address my concern regarding GDR build numbers. $$ 我決定採用另一種方​​法來讀取現有的 SQL Server 實例和版本,通過讀取系統資料庫而不是使用 WMI,這似乎更一致地工作(儘管關於 GDR 建構的問題仍然存在)。過程如下:

  1. 從 中讀取實例名稱和相關系統資料庫項名稱的列表HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL
  2. 對於每一個感興趣的,從HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\key name\Setup讀取版本資訊。尤其:
  • PatchLevel具有完整的版本號,包括 CU,例如。15.0.4033.1.
  • Version具有不包括 CU 的完整版本號,例如。15.0.2000.5.
  • SP具有服務包編號(儘管從現在起這可能始終為 0)。
  • 奇怪的是,似乎沒有任何地方可以將“SQL Server 2019”讀作產品名稱,甚至只是“2019”。

我需要區分這些東西的一種情況是安裝程序包裝器;您需要提前確定是否通過/ACTION=Install,/ACTION=Upgrade/ACTION=Patch(對於後者,您必須將其直接傳遞給修補程序安裝程序;它不適用於完整的安裝程序,無論令人困惑的錯誤消息說什麼)。

如果預設安裝程序自己解決了這個問題,那就太好了,但事實並非如此。如果你傳遞了錯誤的東西,你只會得到非常奇怪的錯誤。

引用自:https://dba.stackexchange.com/questions/264651