SQLServerのバージョンとエディションを調べるには、SERVERPROPERTY関数を使用します。
@@VERSIONでもバージョン情報付きの文字列をまとめて取得できますが、SERVERPROPERTYを使うと、バージョン番号やエディション名などを個別の値として取得できます。
構文
- (SERVERPROPERTY構文)
- SERVERPROPERTY ( '<プロパティ名>' )
戻り値の型はsql_variant型です。文字列として扱う場合はCONVERT関数などで型変換してください。
サンプル
例)バージョン番号を取得する
|
1 |
SELECT SERVERPROPERTY('ProductVersion'); |
- (実行結果)
- 16.0.1000.6
「メジャーバージョン.マイナーバージョン.ビルド番号.リビジョン」の形式で返ります。
例)Service Pack/累積更新プログラムの適用状況を取得する
|
1 2 |
SELECT SERVERPROPERTY('ProductLevel') AS ProductLevel, SERVERPROPERTY('ProductUpdateLevel') AS ProductUpdateLevel; |
- (実行結果)
- ProductLevel: RTM ProductUpdateLevel: CU12
SQLServer 2017以降は、ProductLevelが常に「RTM」を返す代わりに、ProductUpdateLevelで累積更新プログラム(CU)の適用状況が分かるようになっています。SQLServer 2016以前ではProductLevelに「SP1」のようにService Packの状態が入ります。
例)エディション名を取得する
|
1 |
SELECT SERVERPROPERTY('Edition'); |
- (実行結果)
- Developer Edition (64-bit)
例)エディションを数値コードで取得する
|
1 |
SELECT SERVERPROPERTY('EngineEdition'); |
- (実行結果)
- 3
EngineEditionの数値が示すエディション区分は以下のとおりです。
| 値 | エディション区分 |
|---|---|
| 2 | Standard(Web、Business Intelligenceを含む) |
| 3 | Enterprise(Evaluation、Developerを含む) |
| 4 | Express |
| 5 | SQL Database(Azure SQL Database) |
| 8 | Managed Instance(Azure SQL Managed Instance) |
アプリケーション側でエディションによって処理を分岐させたい場合、Edition(文字列)よりもEngineEdition(数値)で判定するほうが、表記ゆれの影響を受けず確実です。
例)主要な情報をまとめて取得する
|
1 2 3 4 |
SELECT SERVERPROPERTY('ProductVersion') AS ProductVersion, SERVERPROPERTY('ProductLevel') AS ProductLevel, SERVERPROPERTY('Edition') AS Edition, SERVERPROPERTY('EngineEdition') AS EngineEdition; |
備考
- 1つの文字列としてまとめて確認したい場合は、@@VERSIONも使用できます。
⇒ [SQLServer] SQLServerのバージョンを取得する(@@VERSION) - SQL Server Management Studio(SSMS)を使う場合は、オブジェクトエクスプローラーでサーバーに接続した際の表示名や、サーバーを右クリックして「プロパティ」を開いた画面でも、バージョンとエディションを確認できます。
- サーバー名を調べたい場合は、@@SERVERNAMEが使用できます。
⇒ [SQLServer] サーバ名を取得する(@@SERVERNAME) - Azure SQL DatabaseやAzure SQL Managed Instanceなど、Azure上のサービスでは、SERVERPROPERTYの各プロパティが返す値が、オンプレミス版のSQLServerとは異なる場合があります。