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

有一个系统存储过程来获取版本#?

尝试

SELECT @@VERSION 

或者对于SQL Server 2000和更高版本以下更容易parsing:)

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

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

SELECT @@ VERSION

我知道这是一个较旧的post,但我更新了在Matt Rogish发布的答案中提到的链接中find的代码(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 SELECT 'Unsupported SQL Server Version' 

对于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

这里的版本号的基本列表,或微软的详尽列表。

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

 exec [master].sys.[xp_msver] 
 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 

如果服务器是2005或更高版本,以下是一些用于testing的脚本

 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 

注意:从原来的答案更新(见评论)

Joe的post中链接的知识库文章非常适合确定哪些服务包已经安装到任何版本。 沿着这些相同的路线, 这个知识库文章将版本号映射到特定的修补程序和累积更新,但它只适用于SQL05 SP2及以上版本。

尝试这个:

 if (SELECT LEFT(CAST(SERVERPROPERTY('productversion') as varchar), 2)) = '10' BEGIN 
 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 

在单个select中只获取主要的SQL Server版本:

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

为SQL 2000返回8 ,为SQL 2005返回9 ,等等(testing到2012年)。

如果你想要的只是T-SQL原因的主要版本,下面给出了SQL Server 2000或更高版本的年份。

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

此代码优雅地处理各种版本的SQL Server的额外空间和选项卡。

尝试这个:

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

尝试

 SELECT @@MICROSOFTVERSION / 0x01000000 AS MajorVersionNumber 

有关更多信息,请参阅: 查询版本/版本信息

select'sqlserver是'+子string(@@ VERSION,21,5)'sql version'