展開されているSQL Serverのバージョンを確認する方法は何ですか?
SQL Serverソフトウェアを使用して実行しようとしました。コマンドラインのSQLステートメントを使用して実行したいと考えています。
展開されているSQL Serverのバージョンを確認する方法は何ですか?
SQL Serverソフトウェアを使用して実行しようとしました。コマンドラインのSQLステートメントを使用して実行したいと考えています。
回答:
バージョンを確認するには、次の方法があります。
方法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\ERRORLOG
and ERRORLOG.n
filesにあります。エントリは次のようになります。
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以降のバージョンのインスタンスで機能します。
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+はProductMajorVersion
&ProductMinorVersion
プロパティをサポートし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バージョン番号は次のとおりです。
これはすべて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)
単に使う
SELECT @@VERSION
出力例
Microsoft SQL Server 2012 - 11.0.2100.60 (X64)
Feb 10 2012 19:39:15
Copyright (c) Microsoft Corporation
Express Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: )