如何检查SQL Server版本

时间:2013-12-03 12:48:37

标签: sql-server-2008 version

确定已部署的SQL Server版本的可能方法是什么?

我尝试使用SQL Server软件。我想使用命令行SQL语句来完成它。

7 个答案:

答案 0 :(得分:190)

以下是查看版本的可能方法:

方法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:查看该实例的Errorlog文件的前几行。默认情况下,错误日志位于Program Files \ Microsoft SQL Server\MSSQL.n\MSSQL\LOG\ERRORLOGERRORLOG.n文件中。条目可能类似于以下内容:

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的操作系统版本

方法4:连接到SQL Server实例,然后运行以下查询:

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

注意此查询适用于SQL Server 2000或更高版本的任何实例

答案 1 :(得分:6)

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 :(得分: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: )

来源:How to check sql server version? (Various ways explained)

答案 3 :(得分:0)

select charindex(  'Express',@@version)

如果此值为0则不是快递版

答案 4 :(得分:0)

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 auth连接到本地服务器实例,如果版本检查失败则抛出错误,并以命令行{{1}的形式返回@@ERROR }},如果> = 16(如果上述ERRORLEVEL为> = 1,第二行转到:ExitFail标签)。

手表,技巧和更多信息

对于SQL 2000+,您可以使用SERVERPROPERTY来确定很多此类信息。

虽然SQL 2008+支持ERRORLEVELProductMajorVersion属性,但是ProductMinorVersion自2000年以来一直存在(请记住,如果不支持该属性,该函数将返回ProductVersion

如果您对较早的版本感兴趣,可以使用NULL函数来拆分PARSENAME(记住“部分”从右到左编号,即ProductVersion返回{{1} }。

还请记住,PARSENAME('a.b.c', 1)返回c,因为SQL 2005和更早版本在版本号中仅使用了3个部分!

因此对于SQL 2008+,您可以简单地使用:

PARSENAME('a.b.c', 4)

对于SQL 2000-2005,您可以使用:

NULL

SELECT SERVERPROPERTY('ProductVersion') AS ProductVersion, CAST(SERVERPROPERTY('ProductMajorVersion') AS INT) AS ProductMajorVersion, CAST(SERVERPROPERTY ('ProductMinorVersion') AS INT) AS ProductMinorVersion; 是一种可提高可读性的黑客工具)

因此对SQL 2000+版本的检查将是:

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;

如果您只对SQL 2008+感兴趣,那么这会简单得多,因为对于早期版本,PARSENAME(...,0)返回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')

您可以使用NULLIF (ISNULL(CAST(SERVERPROPERTY('ProductMajorVersion') AS INT), 0) < 11) -- SQL2012 RAISERROR('You need SQL 2012 or later!', 16, 1); (或ProductLevel)属性来确定RTM / SP n / CTP n 和Dev / Std / Ent / etc等。

Edition

仅供参考,SQL version numbers主要是:

  • 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 compatibility level,因为它可能设置为较低的兼容性。

EngineEdition

答案 5 :(得分:0)

Here is what i have done to find the version 这是我为查找版本所做的事情: 只需编写SELECT @@version,它就会为您提供版本。

答案 6 :(得分:0)

如果您打算迁移到 Azure,这尤其有用

如果您正在搜索兼容性问题,它会为您提供很多见解:

SELECT
    @@servername AS 'Server Name'
   ,CONNECTIONPROPERTY('local_net_address') AS [IP Address]
   ,d.name AS [Database_Name]
   ,d.compatibility_level
   ,@@version AS 'Version'
   ,CASE
        WHEN CONVERT(VARCHAR(128), SERVERPROPERTY('productversion')) LIKE '8%' THEN 'SQL2000'
        WHEN CONVERT(VARCHAR(128), SERVERPROPERTY('productversion')) LIKE '9%' THEN 'SQL2005'
        WHEN CONVERT(VARCHAR(128), SERVERPROPERTY('productversion')) LIKE '10.0%' THEN 'SQL2008'
        WHEN CONVERT(VARCHAR(128), SERVERPROPERTY('productversion')) LIKE '10.5%' THEN 'SQL2008 R2'
        WHEN CONVERT(VARCHAR(128), SERVERPROPERTY('productversion')) LIKE '11%' THEN 'SQL2012'
        WHEN CONVERT(VARCHAR(128), SERVERPROPERTY('productversion')) LIKE '12%' THEN 'SQL2014'
        WHEN CONVERT(VARCHAR(128), SERVERPROPERTY('productversion')) LIKE '13%' THEN 'SQL2016'
        WHEN CONVERT(VARCHAR(128), SERVERPROPERTY('productversion')) LIKE '14%' THEN 'SQL2017'
        WHEN CONVERT(VARCHAR(128), SERVERPROPERTY('productversion')) LIKE '15%' THEN 'SQL2019'
        ELSE 'unknown'
    END AS SQL_Server_Version,
   d.collation_name
   ,(SUM(CAST(mf.size AS BIGINT)) * 8 / 1024) / 1024 AS Size_GBs
FROM sys.master_files mf
INNER JOIN sys.databases d
    ON d.database_id = mf.database_id
WHERE d.database_id > 4 -- Skip system databases
GROUP BY d.name
        ,d.compatibility_level
        ,d.collation_name
ORDER BY d.name

enter image description here