Відповіді:
Спробуйте
SELECT @@VERSION
або для SQL Server 2000 і вище наведено нижче простіше розібратися :)
SELECT SERVERPROPERTY('productversion')
, SERVERPROPERTY('productlevel')
, SERVERPROPERTY('edition')
Я знаю, що це старіша публікація, але я оновив код, знайдений у посиланні (яке загинуло станом на 2013-12-03), згаданим у відповіді, опублікованій Меттом Рогішем :
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 тут .
select cast(serverproperty('productversion') as varchar) as [result]
. Моя думка полягає в тому, що я можу виконати вищезазначене через ADO.NET, ExecuteScalar
а потім проаналізувати рядок результатів як System.Version
об’єкт. Крім того, переведення його в числовий додає різним значенням номерів версій, коли мова заходить про кінцеві нулі та кількість цифр сегменту версії, тоді як рядок можна проаналізувати до дійсного Version
об'єкта, не втрачаючи послідовності кожного компонента версії.
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
Ось трохи сценарію, який я використовую для тестування, якщо сервер є 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
Примітка: оновлено від оригінальної відповіді (див. Коментар)
Стаття KB, зв'язана в публікації Джо, чудово підходить для визначення того, які пакети послуг були встановлені для будь-якої версії. У цій же статті ця стаття KB відображає номери версій до конкретних виправлень та накопичувальних оновлень, але це стосується лише SQL05 SP2 та новіших версій.
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
Спробуйте
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.