SQL Serverのバージョンを確認する方法


125

展開されているSQL Serverのバージョンを確認する方法は何ですか?

SQL Serverソフトウェアを使用して実行しようとしました。コマンドラインのSQLステートメントを使用して実行したいと考えています。



回答:


227

バージョンを確認するには、次の方法があります。

方法1: SQL Serverのインスタンスに接続し、次のクエリを実行します。

Select @@version

このクエリの出力例は次のとおりです。

Microsoft SQL Server 2008 (SP1) - 10.0.2531.0 (X64)   Mar 29 2009 
10:11:52   Copyright (c) 1988-2008 Microsoft Corporation  Express 
Edition (64-bit) on Windows NT 6.1 <X64> (Build 7600: )

方法2: SQL Server Management Studioのオブジェクトエクスプローラーを使用してサーバーに接続します。オブジェクトエクスプローラーが接続されると、SQL Serverの特定のインスタンスへの接続に使用されるユーザー名と共に、バージョン情報が括弧内に表示されます。

方法3:そのインスタンスのエラーログファイルの最初の数行を確認します。既定では、エラーログはProgram Files \ Microsoft SQL Server\MSSQL.n\MSSQL\LOG\ERRORLOGand ERRORLOG.nfilesにあります。エントリは次のようになります。

2011-03-27 22:31:33.50 Server      Microsoft SQL Server 2008 (SP1) - 10.0.2531.0 (X64)                 Mar 29 2009 10:11:52                 Copyright (c) 1988-2008 Microsoft Corporation                Express Edition (64-bit) on Windows NT 6.1 <X64> (Build 7600: )

ご覧のとおり、このエントリは、バージョン、製品レベル、64ビットと32ビットの比較、SQL Serverのエディション、SQL Serverが実行されているOSバージョンなど、製品に関するすべての必要な情報を提供します。

方法4: SQL Serverのインスタンスに接続し、次のクエリを実行します。

SELECT SERVERPROPERTY('productversion'), SERVERPROPERTY ('productlevel'), SERVERPROPERTY ('edition')

注このクエリは、SQL Server 2000以降のバージョンのインスタンスで機能します。


6
方法4の方が方法1よりも信頼できることがわかりました。サービスパックが正しくインストールされていないサーバーで、方法1と方法4が異なる結果を返しましたが、方法4は正しいものでした。
Kaganar

8
declare @sqlVers numeric(4,2)
select @sqlVers = left(cast(serverproperty('productversion') as varchar), 4)

SQL 2000、2005、2008、および2008R2に対して、それぞれ8.00、9.00、10.00、および10.50を提供します。

また、システム拡張手順を試してくださいxp_msver。このストアドプロシージャは次のように呼び出すことができます。

exec master..xp_msver

2

TL; DR

SQLCMD -S (LOCAL) -E -V 16 -Q "IF(ISNULL(CAST(SERVERPROPERTY('ProductMajorVersion') AS INT),0)<11) RAISERROR('You need SQL 2012 or later!',16,1)"
IF ERRORLEVEL 1 GOTO :ExitFail

これは、SQLCMD(SQL Serverに付属)を使用して、Windows認証を使用してローカルサーバーインスタンスに接続し、バージョンチェックが失敗した場合にエラーをスローし、> = 16の場合@@ERRORはコマンドラインとして返しますERRORLEVEL(2番目の行は:ExitFail、前述のERRORLEVELは> = 1)です。

Watchas、Gotchasなどの情報

SQL 2000+の場合、SERVERPROPERTYを使用してこの情報の多くを決定できます。

SQL 2008+はProductMajorVersionProductMinorVersionプロパティをサポートしProductVersionていますが、2000年から存在しています(プロパティがサポートされていない場合、関数はを返すことを思い出してくださいNULL)。

以前のバージョンに興味がある場合は、PARSENAME関数を使用して分割できますProductVersion(「パーツ」は右から左に番号が付けられていることを思い出してください。つまり、PARSENAME('a.b.c', 1)return c)。

SQL 2005以前ではバージョン番号に3つの部分しか使用していなかったため、がPARSENAME('a.b.c', 4)返されることも覚えておいてNULLください。

したがって、SQL 2008+の場合は、次のように簡単に使用できます。

SELECT
    SERVERPROPERTY('ProductVersion') AS ProductVersion,
    CAST(SERVERPROPERTY('ProductMajorVersion')  AS INT) AS ProductMajorVersion,
    CAST(SERVERPROPERTY ('ProductMinorVersion') AS INT) AS ProductMinorVersion;

SQL 2000-2005の場合、以下を使用できます。

SELECT
    SERVERPROPERTY('ProductVersion') AS ProductVersion,
    CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME), CASE WHEN SERVERPROPERTY('ProductVersion') IS NULL THEN 3 ELSE 4 END) AS INT) AS ProductVersion_Major,
    CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME), CASE WHEN SERVERPROPERTY('ProductVersion') IS NULL THEN 2 ELSE 3 END) AS INT) AS ProductVersion_Minor,
    CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME), CASE WHEN SERVERPROPERTY('ProductVersion') IS NULL THEN 1 ELSE 2 END) AS INT) AS ProductVersion_Revision,
    CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME), CASE WHEN SERVERPROPERTY('ProductVersion') IS NULL THEN 0 ELSE 1 END) AS INT) AS ProductVersion_Build;

PARSENAME(...,0)読みやすさを向上させるためのハックです)

したがって、SQL 2000+バージョンのチェックは次のようになります。

IF (CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME), CASE WHEN SERVERPROPERTY('ProductVersion') IS NULL THEN 3 ELSE 4 END) AS INT) < 10) -- SQL2008
OR (
    (CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME), CASE WHEN SERVERPROPERTY('ProductVersion') IS NULL THEN 3 ELSE 4 END) AS INT) = 10) -- SQL2008
AND (CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME), CASE WHEN SERVERPROPERTY('ProductVersion') IS NULL THEN 2 ELSE 1 END) AS INT) < 5)  -- R2 (this may need to be 50)
   )
    RAISERROR('You need SQL 2008R2 or later!', 16, 1);

以前のバージョンにSERVERPROPERTY('ProductMajorVersion')戻るNULLため、SQL 2008+のみに関心がある場合、これは非常に簡単なので、以下を使用できます。

IF (ISNULL(CAST(SERVERPROPERTY('ProductMajorVersion') AS INT), 0) < 11) -- SQL2012
    RAISERROR('You need SQL 2012 or later!', 16, 1);

また、ProductLevelおよびEdition(またはEngineEdition)プロパティを使用して、RTM / SP n / CTP nおよびDev / Std / Ent /などをそれぞれ決定できます。

SELECT
    CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME) AS ProductVersion,
    CAST(SERVERPROPERTY('ProductLevel') AS SYSNAME)   AS ProductLevel,
    CAST(SERVERPROPERTY('Edition') AS SYSNAME)        AS Edition,
    CAST(SERVERPROPERTY('EngineEdition') AS INT)      AS EngineEdition;

FYIの主なSQLバージョン番号は次のとおりです。

  • 8 = SQL 2000
  • 9 = SQL 2005
  • 10 = SQL 2008(および10.5 = SQL 2008R2)
  • 11 = SQL 2012
  • 12 = SQL 2014
  • 13 = SQL 2016
  • 14 = SQL 2017

これはすべてSQL Azureでも機能します。

編集:互換性が低く設定されている可能性があるため 、DB互換性レベルを確認することもできます。

IF EXISTS (SELECT * FROM sys.databases WHERE database_id=DB_ID() AND [compatibility_level] < 110)
    RAISERROR('Database compatibility level must be SQL2008R2 or later (110)!', 16, 1)

1

これは私がバージョンを見つけるために何をしたかです これが私がバージョンを見つけるためにしたSELECT @@versionことです:書くだけでバージョンがわかります。



0
select charindex(  'Express',@@version)

この値が0の場合、特急版ではありません

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.