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

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

Ответ 1

Попробуйте

SELECT @@VERSION 

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

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

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

Ответ 2

SELECT @@VERSION

Ответ 3

Я знаю, что это более старая должность, но я обновил код, найденный в ссылка (которая мертва с 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
   SELECT 'Unsupported SQL Server Version'

Ответ 4

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

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

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

Result   Server Version
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 .

Ответ 5

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

exec [master].sys.[xp_msver]

Ответ 6

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' ('[email protected] + N'), ' + @Edition + ' - ' + @ProductVersion;

END
GO

Ответ 7

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

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

Ответ 8

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

Ответ 9

Попробуйте следующее:

if (SELECT LEFT(CAST(SERVERPROPERTY('productversion') as varchar), 2)) = '10'
BEGIN

Ответ 10

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

Ответ 11

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

Ответ 12

Если все, что вы хотите, является основной версией для причин T-SQL, следующее дает вам год версии SQL Server 2000 или новее.

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

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

Ответ 13

Попробуйте следующее:

SELECT @@VERSION[server], SERVERPROPERTY('productversion'), SERVERPROPERTY ('productlevel'), SERVERPROPERTY ('edition')

Ответ 15

выберите 'sqlserver is' + substring (@@VERSION, 21,5) 'sql version'