Как вы проверяете, какая версия SQL Server для базы данных, используя TSQL? - PullRequest
123 голосов
/ 12 сентября 2008

Существует ли системная хранимая процедура для получения версии #?

Ответы [ 16 ]

228 голосов
/ 12 сентября 2008

Попробуйте

SELECT @@VERSION 

или для SQL Server 2000 и выше разбирать следующее легче :)

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

От: http://support.microsoft.com/kb/321185

29 голосов
/ 12 сентября 2008

SELECT @@ VERSION

25 голосов
/ 18 января 2013

Я знаю, что это более старая запись, но я обновил код, найденный в ссылке (которая не работает по состоянию на 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 голосов
/ 23 июня 2011

Для SQL Server 2000 и выше, я предпочитаю следующий анализ ответа Джо:

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

Дает результаты следующим образом:

<b>Result   Server Version</b>
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 здесь .

4 голосов
/ 08 ноября 2014
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 голосов
/ 07 августа 2014

Существует еще одна расширенная хранимая процедура, которую можно использовать для просмотра информации о версии:

exec [master].sys.[xp_msver]
2 голосов
/ 04 февраля 2009

Вот немного скрипта, который я использую для тестирования, если сервер 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

Примечание: обновлено с оригинального ответа (см. Комментарий)

1 голос
/ 27 марта 2018
select substring(@@version,0,charindex(convert(varchar,SERVERPROPERTY('productversion')) ,@@version)+len(convert(varchar,SERVERPROPERTY('productversion')))) 
1 голос
/ 03 мая 2017

Попробуйте

SELECT @@MICROSOFTVERSION / 0x01000000 AS MajorVersionNumber

Для получения дополнительной информации см .: Запрос информации о версии / издании

1 голос
/ 30 апреля 2014

Получение только основной версии SQL Server за один выбор:

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

Возвращает 8 для SQL 2000, 9 для SQL 2005 и т. Д. (Проверено до 2012 г.).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...