3

我正在使用 SQL Server,我需要一个返回版本年份的 SQL 查询。

我熟悉以下方法:

select @@version

select SERVERPROPERTY('productversion')

但我需要一个将返回的查询,例如:

2008

或者

2005

我提到的第一个查询需要脏解析,第二个返回一些产品编号。

有谁知道这样的查询?

谢谢!

4

3 回答 3

11

试试这个 - 它只检查版本号的前两个字符并返回 SQL Server 版本的相应“年份”。

SELECT
    'SQL Server Year ' + 
    CASE SUBSTRING(CONVERT(VARCHAR(50), SERVERPROPERTY('productversion')), 1, 2)
          WHEN '8.' THEN '2000'
          WHEN '9.' THEN '2005'
          WHEN '10' THEN '2008'
          WHEN '11' THEN '2012'
          WHEN '12' THEN '2014'
          WHEN '13' THEN '2016'
          WHEN '14' THEN '2017'
          WHEN '15' THEN '2019'
    END

当然,你可以把它打包成一个用户定义的函数,让它“更漂亮”

资料来源:MSDN

于 2012-11-11T15:14:19.230 回答
1

由于属性的第一个数字SERVERPROPERTY('productversion') 是主要版本号:

major.minor.build.revision

然后您可以创建一个临时表,其中包含每个版本的主要版本号及其年份。然后您将得到以下查询:

 DECLARE @productversion VARCHAR(100);
 SELECT @productversion = CAST(SERVERPROPERTY('productversion') AS VARCHAR(100));
SELECT years.year, years.name
FROM 
(
  VALUES(9, '2005', 'SQL Server 2005'), 
        (10, '2008', 'SQL Server 2008 OR SQL Server 2008 R2'),
        ... 
) AS years(majornumber, [year], name)
WHERE years.majornumber = LEFT(@productversion, 
                               CHARINDEX('.', @productversion , 1) - 1);
于 2012-11-11T14:05:59.167 回答
0
SELECT 'SQL Server ' + 
    CASE CAST(SERVERPROPERTY('productversion') AS CHAR(2))
          WHEN '8.' THEN '2000'
          WHEN '9.' THEN '2005'
          WHEN '10' THEN '2008/2008R2'
          WHEN '11' THEN '2012'
          WHEN '12' THEN '2014'
          WHEN '13' THEN '2016'
    END

输出 -

----------------------
SQL Server 2016
于 2016-04-21T12:19:15.203 回答