如何使用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'