如何检查SQL Server版本


Answers:


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:查看该实例的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的OS版本。

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

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

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


6
我发现方法4比方法1更可靠-我的服务器没有正确安装Service Pack,其中方法1和方法4返回的结果不同,但是方法4是正确的。
卡加纳尔2015年

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

Watchas,Gotchas和更多信息

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

尽管SQL 2008+支持ProductMajorVersionProductMinorVersion属性,ProductVersion但自2000年以来一直存在(请记住,如果不支持属性,该函数将返回NULL)。

如果您对较早的版本感兴趣,可以使用PARSENAME函数进行拆分ProductVersion(记住“部件”从右到左编号,即PARSENAME('a.b.c', 1)return c)。

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

因此,对于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);

如果您只对SQL 2008+感兴趣,这会简单得多,因为SERVERPROPERTY('ProductMajorVersion')返回的NULL是早期版本,因此您可以使用:

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

您可以使用ProductLevelEdition(或EngineEdition)属性分别确定RTM / SP n / CTP n和Dev / Std / Ent / etc。

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;

仅供参考,主要的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!

编辑: 您可能还想检查数据库兼容性级别,因为它可能设置为较低的兼容性。

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)



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

如果该值为0,则不是速成版

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.