Як перевірити версію SQL Server


125

Які можливі способи визначення розгорнутої версії SQL Server?

Я намагався це зробити за допомогою програмного забезпечення SQL Server. Я хочу це зробити за допомогою оператора SQL командного рядка.



Відповіді:


227

Нижче наведено можливі способи перегляду версії:

Спосіб 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: Підключіться до сервера за допомогою Object Explorer у SQL Server Management Studio. Після підключення Object Explorer він відображатиме інформацію про версії в круглих дужках, а також ім'я користувача, яке використовується для підключення до конкретного примірника SQL Server.

Спосіб 3: Подивіться перші кілька рядків файлу Errorlog для цього екземпляра. За замовчуванням журнал помилок розташований у програмі Файли \ Microsoft SQL Server\MSSQL.n\MSSQL\LOG\ERRORLOGта ERRORLOG.nфайли. Записи можуть нагадувати таке:

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 або більш пізньої версії


6
Я виявив, що метод 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

2

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 auth, видає помилку, якщо перевірка версії не вдається, і поверне @@ERRORяк командний рядок, ERRORLEVELякщо> = 16 (а другий рядок переходить до :ExitFailмітки, якщо згадане вище ERRORLEVEL> = 1).

Watchas, Gotchas та додаткова інформація

Для 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та Edition(або EngineEdition) для визначення RTM / SP n / CTP n та Dev / Std / Ent / тощо відповідно.

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;

FYI Основними номерами версій 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!

ВЕДЕНО: Ви також можете перевірити рівень сумісності БД, оскільки його можна встановити на нижчу сумісність.

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)

1

Ось що я зробив, щоб знайти версію Ось що я зробив, щоб знайти версію: просто напишіть, SELECT @@versionі вона дасть вам версію.



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