Как проверить, какая версия SQL Server для базы данных использует TSQL?
-
09-06-2019 - |
Вопрос
Существует ли системная хранимая процедура для получения версии #?
Решение
Пытаться
SELECT @@VERSION
или для SQL Server 2000 и выше следующее легче разобрать :)
SELECT SERVERPROPERTY('productversion')
, SERVERPROPERTY('productlevel')
, SERVERPROPERTY('edition')
Другие советы
ВЫБЕРИТЕ @@ВЕРСИЮ
Я знаю, что это более старая запись, но я обновил код, найденный в связь (который мертв по состоянию на 3 декабря 2013 г.), упомянутый в отвечать Сообщение от Мэтт Рогиш:
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'
Для 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 здесь.
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
Существует еще одна расширенная хранимая процедура, которую можно использовать для просмотра информации о версии:
exec [master].sys.[xp_msver]
Вот небольшой скрипт, который я использую для проверки наличия сервера 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
Примечание :обновлено из оригинального ответа (см. комментарий)
Статья базы знаний, ссылка на которую находится в пост Джо отлично подходит для определения того, какие пакеты обновлений были установлены для той или иной версии.В том же духе, эта статья базы знаний сопоставляет номера версий конкретным исправлениям и накопительным обновлениям, но это применимо только к SQL05 SP2 и более поздним версиям.
Попробуй это:
if (SELECT LEFT(CAST(SERVERPROPERTY('productversion') as varchar), 2)) = '10'
BEGIN
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
Получение только основной версии 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 г.).
Пытаться
SELECT @@MICROSOFTVERSION / 0x01000000 AS MajorVersionNumber
Для получения дополнительной информации см.: Запрос информации о версии/издании
select substring(@@version,0,charindex(convert(varchar,SERVERPROPERTY('productversion')) ,@@version)+len(convert(varchar,SERVERPROPERTY('productversion'))))
Если вам нужна только основная версия по причинам T-SQL, ниже указан год версии SQL Server для 2000 или более поздней версии.
SELECT left(ltrim(replace(@@Version,'Microsoft SQL Server','')),4)
Этот код изящно обрабатывает дополнительные пробелы и табуляции для различных версий SQL Server.
Попробуй это:
SELECT @@VERSION[server], SERVERPROPERTY('productversion'), SERVERPROPERTY ('productlevel'), SERVERPROPERTY ('edition')
Попробуй это:
SELECT
'the sqlserver is ' + substring(@@VERSION, 21, 5) AS [sql version]