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

StackOverflow https://stackoverflow.com/questions/59444

  •  09-06-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

Пытаться

SELECT @@VERSION 

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

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

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

Другие советы

ВЫБЕРИТЕ @@ВЕРСИЮ

Я знаю, что это более старая запись, но я обновил код, найденный в связь (который мертв по состоянию на 3 декабря 2013 г.), упомянутый в отвечать Сообщение от Мэтт Рогиш:

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'

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

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

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

exec [master].sys.[xp_msver]

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

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

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

Получение только основной версии 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 г.).

Пытаться

SELECT @@MICROSOFTVERSION / 0x01000000 AS MajorVersionNumber

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

select substring(@@version,0,charindex(convert(varchar,SERVERPROPERTY('productversion')) ,@@version)+len(convert(varchar,SERVERPROPERTY('productversion')))) 

Если вам нужна только основная версия по причинам 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
    'the sqlserver is ' + substring(@@VERSION, 21, 5) AS [sql version]
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top