WMIクエリを使用して、特定のインスタンス名用にインストールされているSQL Serverの現在のバージョンを読み取ろうとする既存のコードがいくつかあります。 VERSIONの最初の点線部分(アップグレードインストールをトリガーするため)およびSPLEVEL(パッチインストールをトリガーするため)をチェックします。これは今までうまくいきました。 (バージョンをプログラムで取得し、インスタンスへのSQL接続を実際に開かなくてもよいようにする必要があります。)
ただし、2017および2019ではサービスパックが廃止され、SPLEVELは役に立たなくなったため、古いCUのみが存在する場合を判断するための代替策を探しています。
バージョン番号の表 によると、CU4を適用した最新の2019インストールで、バージョン15.0.4033.1とファイルバージョン2019.150.4033.1が表示されます(実際のページにはタイプミスがあります)後者)。
ただし、一致するFILEVERSIONが表示されている間、VERSIONに表示されるのはRTM値15.0.2000.5です。これは、SQL Server構成マネージャーで詳細プロパティを確認しても確認されます。 。(そしてFWIW私はSPLEVELがまだ0であることも確認しました。)
奇妙なことに、Management Studioを使用して接続すると、バージョンが15.0.4033.1と表示されます。
それが必要な場合はFILEVERSIONの比較に切り替えてもかまいませんが、心配なのは「GDRビルド」です。 2017年の同等のテーブル を見ると、特定の韻や理由は見られず、最新のGDRビルドは古いCUビルドよりも低いバージョン番号を持つことができます。
どうすればこれを理解できますか? GDRビルドとは何ですか?とにかくどこから来たのですか?既にいくつかのCUが適用されているインストールを「アップグレード」しないと想定しても安全ですか?
この興味深い問題の部分的な解決策として、私はpowershellを検討します。
まず、必要なすべてのサーバーに SQL Server PowerShellモジュールをインストール する必要があります。
Get-SqlAgent -ServerInstance "MY_SERVER"
上の画像では、探しているServerVersion
を確認できます。
[GDRビルド番号に関する私の懸念には対応していないため、これは部分的な回答にすぎません。]
私は、WMIを使用する代わりにレジストリを読み取ることにより、既存のSQL Serverインスタンスとバージョンを読み取るために別のアプローチを取ることを決定しました。プロセスは次のとおりです。
HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL
から読み取ります。HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\
キー名\Setup
からバージョン情報を読み取ります。特に:PatchLevel
には、CUを含む完全なバージョン番号があります。 15.0.4033.1
。Version
には、CUを除く完全なバージョン番号があります。 15.0.2000.5
。SP
にはサービスパック番号があります(これはおそらく、今後は常に0になるでしょう)。これらを区別する必要があるケースの1つは、インストーラーラッパーです。 /ACTION=Install
、/ACTION=Upgrade
、または/ACTION=Patch
を渡すかどうかを事前に把握する必要があります(後者の場合は、ホットフィックスインストーラーに直接渡す必要があります。これは機能しません。混乱を招くエラーメッセージの内容に関係なく、完全なインストーラー)。
デフォルトのインストーラーがこれを理解できればいいのですが、そうではありません。間違ったものを渡すと、非常に奇妙なエラーが発生します。