128

是否有系统存储过程来获取版本号?

4

16 回答 16

237

尝试

SELECT @@VERSION 

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

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

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

于 2008-09-12T16:33:27.890 回答
31

选择@@版本

于 2008-09-12T16:30:50.970 回答
29

我知道这是一篇较旧的帖子,但我更新了Matt Rogish发布的答案中提到的链接中的代码(截至 2013 年 12 月 3 日已失效) :

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'
于 2013-01-18T00:39:01.233 回答
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

此处为版本号的基本列表,或此处为 Microsoft 的详尽列表。

于 2011-06-23T13:31:24.927 回答
4

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

exec [master].sys.[xp_msver]
于 2014-08-07T17:27:33.743 回答
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
于 2014-11-08T15:02:07.000 回答
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

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

于 2009-02-04T09:59:29.417 回答
2

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

于 2008-09-13T08:00:59.860 回答
1

试试这个:

if (SELECT LEFT(CAST(SERVERPROPERTY('productversion') as varchar), 2)) = '10'
BEGIN
于 2010-07-05T11:05:52.297 回答
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
于 2013-05-15T17:21:13.387 回答
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 年)。

于 2014-04-30T10:32:43.897 回答
1

尝试

SELECT @@MICROSOFTVERSION / 0x01000000 AS MajorVersionNumber

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

于 2017-05-03T18:13:18.213 回答
1
select substring(@@version,0,charindex(convert(varchar,SERVERPROPERTY('productversion')) ,@@version)+len(convert(varchar,SERVERPROPERTY('productversion')))) 
于 2018-03-27T12:23:12.803 回答
0

如果出于 T-SQL 的原因您只需要主要版本,以下为您提供 2000 年或更高版本的 SQL Server 版本的年份。

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

此代码优雅地处理各种 SQL Server 版本的额外空格和制表符。

于 2016-10-21T13:12:39.840 回答
0

试试这个:

SELECT @@VERSION[server], SERVERPROPERTY('productversion'), SERVERPROPERTY ('productlevel'), SERVERPROPERTY ('edition')
于 2017-02-17T07:26:51.623 回答
-1

试试这个:

SELECT
    'the sqlserver is ' + substring(@@VERSION, 21, 5) AS [sql version]
于 2016-03-04T02:46:41.460 回答