Як перевірити, яка версія 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 сервер 2000
pdem


28

Я знаю, що це старіша публікація, але я оновив код, знайдений у посиланні (яке загинуло станом на 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

Для 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 тут .


Мені подобається це, приємно, просто і багаторазово використовувати для всіх версій сервера. Я використовував трохи змінену версію вище: 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

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

Стаття KB, зв'язана в публікації Джо, чудово підходить для визначення того, які пакети послуг були встановлені для будь-якої версії. У цій же статті ця стаття KB відображає номери версій до конкретних виправлень та накопичувальних оновлень, але це стосується лише SQL05 SP2 та новіших версій.



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, 9для SQL 2005 тощо тощо (перевірено до 2012 року).



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')

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.