Как проверить версию SQL Server

126

Каковы возможные способы определения развернутой версии SQL Server?

Я пытался сделать это с помощью программного обеспечения SQL Server. Я хочу сделать это с помощью SQL-оператора командной строки.

Ямин Башир
источник

Ответы:

228

Ниже приведены возможные способы увидеть версию:

Метод 1. Подключитесь к экземпляру SQL Server, а затем выполните следующий запрос:

Select @@version

Пример вывода этого запроса выглядит следующим образом:

Microsoft SQL Server 2008 (SP1) - 10.0.2531.0 (X64)   Mar 29 2009 
10:11:52   Copyright (c) 1988-2008 Microsoft Corporation  Express 
Edition (64-bit) on Windows NT 6.1 <X64> (Build 7600: )

Метод 2: подключитесь к серверу с помощью обозревателя объектов в SQL Server Management Studio. После подключения обозревателя объектов в скобках будет отображаться информация о версии вместе с именем пользователя, которое используется для подключения к конкретному экземпляру SQL Server.

Метод 3. Посмотрите на первые несколько строк файла Errorlog для этого экземпляра. По умолчанию журнал ошибок находится в папке Program Files \ Microsoft SQL Server\MSSQL.n\MSSQL\LOG\ERRORLOGи ERRORLOG.nfiles. Записи могут выглядеть следующим образом:

2011-03-27 22:31:33.50 Server      Microsoft SQL Server 2008 (SP1) - 10.0.2531.0 (X64)                 Mar 29 2009 10:11:52                 Copyright (c) 1988-2008 Microsoft Corporation                Express Edition (64-bit) on Windows NT 6.1 <X64> (Build 7600: )

Как видите, эта запись дает всю необходимую информацию о продукте, такую ​​как версия, уровень продукта, 64-битная или 32-битная версия, выпуск SQL Server и версия ОС, на которой работает SQL Server.

Метод 4: подключитесь к экземпляру SQL Server, а затем выполните следующий запрос:

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

Примечание. Этот запрос работает с любым экземпляром SQL Server 2000 или более поздней версии.

Имран
источник
7
Я обнаружил, что метод 4 более надежен, чем метод 1 - у меня были серверы, на которых пакет обновления не был установлен правильно, где метод 1 и метод 4 возвращали разные результаты, но метод 4 был правильным.
Каганар
8
declare @sqlVers numeric(4,2)
select @sqlVers = left(cast(serverproperty('productversion') as varchar), 4)

Дает 8.00, 9.00, 10.00 и 10.50 для SQL 2000, 2005, 2008 и 2008R2 соответственно.

Также попробуйте расширенную процедуру системы xp_msver. Вы можете вызвать эту хранимую процедуру как

exec master..xp_msver
Линга
источник
3

TL; DR

SQLCMD -S (LOCAL) -E -V 16 -Q "IF(ISNULL(CAST(SERVERPROPERTY('ProductMajorVersion') AS INT),0)<11) RAISERROR('You need SQL 2012 or later!',16,1)"
IF ERRORLEVEL 1 GOTO :ExitFail

Он использует SQLCMD (поставляется с SQL Server) для подключения к экземпляру локального сервера с использованием аутентификации Windows, выдаёт ошибку, если проверка версии завершается неудачно, и возвращает в @@ERRORкачестве командной строки, ERRORLEVELесли> = 16 (и вторая строка переходит к :ExitFailметке, если вышеупомянутое ERRORLEVEL> = 1).

Часы, подсказки и дополнительная информация

Для SQL 2000+ вы можете использовать SERVERPROPERTY, чтобы определить большую часть этой информации.

Хотя SQL 2008+ поддерживает свойства ProductMajorVersion& ProductMinorVersion, ProductVersionон существует примерно с 2000 года (помня, что если свойство не поддерживается, функция возвращает NULL).

Если вас интересуют более ранние версии, вы можете использовать PARSENAMEфункцию для разделения ProductVersion(помня, что «части» нумеруются справа налево, т.е. PARSENAME('a.b.c', 1)возвращает c).

Также помните, что это PARSENAME('a.b.c', 4)возвращается NULL, потому что SQL 2005 и более ранние версии использовали только 3 части в номере версии!

Итак, для SQL 2008+ вы можете просто использовать:

SELECT
    SERVERPROPERTY('ProductVersion') AS ProductVersion,
    CAST(SERVERPROPERTY('ProductMajorVersion')  AS INT) AS ProductMajorVersion,
    CAST(SERVERPROPERTY ('ProductMinorVersion') AS INT) AS ProductMinorVersion;

Для SQL 2000-2005 вы можете использовать:

SELECT
    SERVERPROPERTY('ProductVersion') AS ProductVersion,
    CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME), CASE WHEN SERVERPROPERTY('ProductVersion') IS NULL THEN 3 ELSE 4 END) AS INT) AS ProductVersion_Major,
    CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME), CASE WHEN SERVERPROPERTY('ProductVersion') IS NULL THEN 2 ELSE 3 END) AS INT) AS ProductVersion_Minor,
    CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME), CASE WHEN SERVERPROPERTY('ProductVersion') IS NULL THEN 1 ELSE 2 END) AS INT) AS ProductVersion_Revision,
    CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME), CASE WHEN SERVERPROPERTY('ProductVersion') IS NULL THEN 0 ELSE 1 END) AS INT) AS ProductVersion_Build;

( PARSENAME(...,0)это хитрость для улучшения читаемости)

Итак, проверка версии SQL 2000+ будет:

IF (CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME), CASE WHEN SERVERPROPERTY('ProductVersion') IS NULL THEN 3 ELSE 4 END) AS INT) < 10) -- SQL2008
OR (
    (CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME), CASE WHEN SERVERPROPERTY('ProductVersion') IS NULL THEN 3 ELSE 4 END) AS INT) = 10) -- SQL2008
AND (CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME), CASE WHEN SERVERPROPERTY('ProductVersion') IS NULL THEN 2 ELSE 1 END) AS INT) < 5)  -- R2 (this may need to be 50)
   )
    RAISERROR('You need SQL 2008R2 or later!', 16, 1);

Это намного проще, если вас интересует только SQL 2008+, потому что SERVERPROPERTY('ProductMajorVersion')возвращается NULLдля более ранних версий, поэтому вы можете использовать:

IF (ISNULL(CAST(SERVERPROPERTY('ProductMajorVersion') AS INT), 0) < 11) -- SQL2012
    RAISERROR('You need SQL 2012 or later!', 16, 1);

И вы можете использовать ProductLevelиEditionEngineEdition свойства (или ) для определения RTM / SP n / CTP n и Dev / Std / Ent / etc соответственно.

SELECT
    CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME) AS ProductVersion,
    CAST(SERVERPROPERTY('ProductLevel') AS SYSNAME)   AS ProductLevel,
    CAST(SERVERPROPERTY('Edition') AS SYSNAME)        AS Edition,
    CAST(SERVERPROPERTY('EngineEdition') AS INT)      AS EngineEdition;

К вашему сведению, основные номера версий SQL :

  • 8 = SQL 2000
  • 9 = SQL 2005
  • 10 = SQL 2008 (и 10,5 = SQL 2008R2)
  • 11 = SQL 2012
  • 12 = SQL 2014
  • 13 = SQL 2016
  • 14 = SQL 2017

И все это работает и для SQL Azure!

EDITED: вы также можете проверить уровень совместимости вашей БД, поскольку он может быть установлен на более низкую совместимость.

IF EXISTS (SELECT * FROM sys.databases WHERE database_id=DB_ID() AND [compatibility_level] < 110)
    RAISERROR('Database compatibility level must be SQL2008R2 or later (110)!', 16, 1)
AndrewD
источник
1

Вот что я сделал, чтобы найти версию Вот что я сделал, чтобы найти версию: просто напишите, SELECT @@versionи она выдаст вам версию.

Имад Уллах
источник
0
select charindex(  'Express',@@version)

если это значение равно 0, это не экспресс-выпуск

R.Alonso
источник