Які можливі способи визначення розгорнутої версії SQL Server?
Я намагався це зробити за допомогою програмного забезпечення SQL Server. Я хочу це зробити за допомогою оператора SQL командного рядка.
Які можливі способи визначення розгорнутої версії SQL Server?
Я намагався це зробити за допомогою програмного забезпечення SQL Server. Я хочу це зробити за допомогою оператора SQL командного рядка.
Відповіді:
Нижче наведено можливі способи перегляду версії:
Спосіб 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 або більш пізньої версії
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
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 є:
І це все працює і для 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)
Просто використовуйте
SELECT @@VERSION
Вибірка зразка
Microsoft SQL Server 2012 - 11.0.2100.60 (X64)
Feb 10 2012 19:39:15
Copyright (c) Microsoft Corporation
Express Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: )
Джерело: Як перевірити версію сервера sql? (Пояснюються різні способи)