展開されている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\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以降のバージョンのインスタンスで機能します。
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: )