Как проверить, какая версия SQL Server для базы данных с помощью TSQL?

Ответы:

234

Пытаться

SELECT @@VERSION 

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

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

С: http://support.microsoft.com/kb/321185

Джо Кумерл
источник
1
Второй работает для меня, и я добавляю, чтобы проверить Википедию, чтобы понять, что 8.00.xx означает SQL server 2000
pdem
28

Я знаю , что это старая почта , но я обновил код , найденный в ссылке (который умер от 2013-12-03) , упомянутых в ответе разместил Matt Rogish :

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

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

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 здесь .

Geoff
источник
Мне это нравится, красивый, простой и многоразовый для разных серверных версий. Я использовал немного измененную версию выше: select cast(serverproperty('productversion') as varchar) as [result]. Я хочу сказать, что я могу выполнить вышеуказанное через ADO.NET, ExecuteScalarа затем проанализировать полученную строку как System.Versionобъект. Кроме того, преобразование его в числовое значение дает разные значения номерам версий, когда дело доходит до конечных нулей и счетчика цифр сегмента версии, в то время как строка может быть преобразована в действительный Versionобъект без потери согласованности каждого компонента версии.
Ивайло Славов
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
Alex
источник
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

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

Брюс Чепмен
источник
Только что обнаружил, что это не работает sql 2008, потому что «10» меньше «9». Вы можете изменить значение в обновленном ответе, чтобы использовать 8, 9, 10 или все, что вам нужно для тестирования, в качестве минимального значения
Брюс Чепмен,
3

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

exec [master].sys.[xp_msver]
Зия
источник
2

Статья базы знаний, ссылка на которую есть в сообщении Джо, отлично подходит для определения того, какие пакеты обновления были установлены для любой версии. Аналогичным образом в этой статье базы знаний номера версий сопоставляются с конкретными исправлениями и накопительными обновлениями, но это применимо только к SQL05 SP2 и выше.

Matt
источник
1

Попробуй это:

if (SELECT LEFT(CAST(SERVERPROPERTY('productversion') as varchar), 2)) = '10'
BEGIN
урод
источник
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
пешеходный переход
источник
1

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

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

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

Nux
источник
1
select substring(@@version,0,charindex(convert(varchar,SERVERPROPERTY('productversion')) ,@@version)+len(convert(varchar,SERVERPROPERTY('productversion')))) 
Викрант Багал
источник
0

Если вам нужна только основная версия по причинам T-SQL, ниже указан год версии SQL Server для 2000 или более поздней версии.

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

Этот код корректно обрабатывает лишние пробелы и вкладки для различных версий SQL Server.

Аллен Акерман
источник
0

Попробуй это:

SELECT @@VERSION[server], SERVERPROPERTY('productversion'), SERVERPROPERTY ('productlevel'), SERVERPROPERTY ('edition')
Arif
источник
-1

Попробуй это:

SELECT
    'the sqlserver is ' + substring(@@VERSION, 21, 5) AS [sql version]
pruthvi
источник