Каковы возможные способы определения развернутой версии 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: подключитесь к серверу с помощью обозревателя объектов в SQL Server Management Studio. После подключения обозревателя объектов в скобках будет отображаться информация о версии вместе с именем пользователя, которое используется для подключения к конкретному экземпляру SQL Server.
Метод 3. Посмотрите на первые несколько строк файла Errorlog для этого экземпляра. По умолчанию журнал ошибок находится в папке Program Files \ Microsoft SQL Server\MSSQL.n\MSSQL\LOG\ERRORLOG
и ERRORLOG.n
files. Записи могут выглядеть следующим образом:
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, выдаёт ошибку, если проверка версии завершается неудачно, и возвращает в @@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
иEdition
EngineEdition
свойства (или ) для определения 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 :
И все это работает и для 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)
Просто используйте
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-сервера? (Различные способы объяснения)