如何使用TSQL检查数据库的SQL Server版本?


Answers:


234

尝试

SELECT @@VERSION 

或对于SQL Server 2000及更高版本,以下内容更易于解析:)

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

来自:http : //support.microsoft.com/kb/321185


1
第二个对我有用,我添加到Wikipedia上了解8.00.xx表示SQL Server 2000
pdem 2015年


28

我知道这是一篇较旧的文章,但我更新了Matt Rogish发布的答案中提到的链接中的代码(截至2013-12-03 无效)

DECLARE @ver nvarchar(128)
SET @ver = CAST(serverproperty('ProductVersion') AS nvarchar)
SET @ver = SUBSTRING(@ver, 1, CHARINDEX('.', @ver) - 1)

IF ( @ver = '7' )
   SELECT 'SQL Server 7'
ELSE IF ( @ver = '8' )
   SELECT 'SQL Server 2000'
ELSE IF ( @ver = '9' )
   SELECT 'SQL Server 2005'
ELSE IF ( @ver = '10' )
   SELECT 'SQL Server 2008/2008 R2'
ELSE IF ( @ver = '11' )
   SELECT 'SQL Server 2012'
ELSE IF ( @ver = '12' )
   SELECT 'SQL Server 2014'
ELSE IF ( @ver = '13' )
   SELECT 'SQL Server 2016'
ELSE IF ( @ver = '14' )
   SELECT 'SQL Server 2017'
ELSE
   SELECT 'Unsupported SQL Server Version'

14

对于SQL Server 2000及更高版本,我希望对Joe的答案进行以下解析:

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

结果如下:

结果服务器版本
8.00 SQL 2000
9.00 SQL 2005
10.00 SQL 2008年
10.50 SQL 2008R2
11.00 SQL 2012年
12.00 SQL 2014年

版本号的基本名单这里,或者从微软详尽的清单在这里


我喜欢这样,跨服务器版本很好,简单且可重用。我使用了上面的略微修改的版本:select cast(serverproperty('productversion') as varchar) as [result]。我的观点是,我可以通过ADO.NET执行上述操作ExecuteScalar,然后将结果字符串解析为一个System.Version对象。同样,将其迷恋为数字时,对于尾随零和版本段数字计数,版本号具有不同的含义,而可以将字符串解析为有效Version对象,而不会失去每个版本组件的一致性。
Ivaylo Slavov

4
CREATE FUNCTION dbo.UFN_GET_SQL_SEVER_VERSION 
(
)
RETURNS sysname
AS
BEGIN
    DECLARE @ServerVersion sysname, @ProductVersion sysname, @ProductLevel sysname, @Edition sysname;

    SELECT @ProductVersion = CONVERT(sysname, SERVERPROPERTY('ProductVersion')), 
           @ProductLevel = CONVERT(sysname, SERVERPROPERTY('ProductLevel')),
           @Edition = CONVERT(sysname, SERVERPROPERTY ('Edition'));
    --see: http://support2.microsoft.com/kb/321185
    SELECT @ServerVersion = 
        CASE 
            WHEN @ProductVersion LIKE '8.00.%' THEN 'Microsoft SQL Server 2000'
            WHEN @ProductVersion LIKE '9.00.%' THEN 'Microsoft SQL Server 2005'
            WHEN @ProductVersion LIKE '10.00.%' THEN 'Microsoft SQL Server 2008'
            WHEN @ProductVersion LIKE '10.50.%' THEN 'Microsoft SQL Server 2008 R2'
            WHEN @ProductVersion LIKE '11.0%' THEN 'Microsoft SQL Server 2012'
            WHEN @ProductVersion LIKE '12.0%' THEN 'Microsoft SQL Server 2014'
        END

    RETURN @ServerVersion + N' ('+@ProductLevel + N'), ' + @Edition + ' - ' + @ProductVersion;

END
GO

3

这是我用于测试服务器是否为2005年或更高版本的一些脚本

declare @isSqlServer2005 bit
select @isSqlServer2005 = case when CONVERT(int, SUBSTRING(CONVERT(varchar(15), SERVERPROPERTY('productversion')), 0, CHARINDEX('.', CONVERT(varchar(15), SERVERPROPERTY('productversion'))))) < 9 then 0 else 1 end
select @isSqlServer2005

注意:从原始答案更新(请参阅评论)


刚刚发现这在sql 2008中不起作用,因为'10'小于'9'。您可以将更新后的答案中的值更改为使用8、9、10或您需要测试的最小值作为最小值
Bruce Chapman

3

还有另一个扩展的存储过程,可用于查看版本信息:

exec [master].sys.[xp_msver]

2

Joe的帖子中链接的KB文章非常适合确定已针对任何版本安装了哪些Service Pack。同样,该知识库文章将版本号映射到特定的修补程序和累积更新,但仅适用于SQL05 SP2及更高版本。


1

试试这个:

if (SELECT LEFT(CAST(SERVERPROPERTY('productversion') as varchar), 2)) = '10'
BEGIN

1
SELECT 
@@SERVERNAME AS ServerName,
CASE WHEN LEFT(CAST(serverproperty('productversion') as char), 1) = 9 THEN '2005'
 WHEN LEFT(CAST(serverproperty('productversion') as char), 2) = 10 THEN '2008'
 WHEN LEFT(CAST(serverproperty('productversion') as char), 2) = 11 THEN '2012'
END AS MajorVersion,
SERVERPROPERTY ('productlevel') AS MinorVersion, 
SERVERPROPERTY('productversion') AS FullVersion, 
SERVERPROPERTY ('edition') AS Edition

1

通过一次选择仅获取主要的SQL Server版本:

SELECT  SUBSTRING(ver, 1, CHARINDEX('.', ver) - 1)
FROM (SELECT CAST(serverproperty('ProductVersion') AS nvarchar) ver) as t

返回8SQL 2000,9SQL 2005等(测试到2012年)。



1
select substring(@@version,0,charindex(convert(varchar,SERVERPROPERTY('productversion')) ,@@version)+len(convert(varchar,SERVERPROPERTY('productversion')))) 

0

如果由于T-SQL的原因,您想要的只是主要版本,则以下内容为您提供了2000或更高版本的SQL Server版本的年份。

SELECT left(ltrim(replace(@@Version,'Microsoft SQL Server','')),4)

这段代码可以优雅地处理SQL Server各种版本的多余空格和制表符。


0

试试这个:

SELECT @@VERSION[server], SERVERPROPERTY('productversion'), SERVERPROPERTY ('productlevel'), SERVERPROPERTY ('edition')

-1

试试这个:

SELECT
    'the sqlserver is ' + substring(@@VERSION, 21, 5) AS [sql version]
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.