Odpowiedzi:
Próbować
SELECT @@VERSION
lub w przypadku SQL Server 2000 i nowszych, poniższe są łatwiejsze do przeanalizowania :)
SELECT SERVERPROPERTY('productversion')
, SERVERPROPERTY('productlevel')
, SERVERPROPERTY('edition')
Wiem, że to starszy post, ale zaktualizowałem kod znajdujący się w linku (który jest martwy na dzień 03.12.2013) wymieniony w odpowiedzi zamieszczonej przez Matta Rogisha :
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'
W przypadku SQL Server 2000 i nowszych preferuję następującą analizę odpowiedzi Joe:
declare @sqlVers numeric(4,2)
select @sqlVers = left(cast(serverproperty('productversion') as varchar), 4)
Daje następujące wyniki:
Wersja serwera wyników 8,00 SQL 2000 9.00 SQL 2005 10.00 SQL 2008 10.50 SQL 2008R2 11.00 SQL 2012 12.00 SQL 2014
Podstawowa lista numerów wersji tutaj lub wyczerpująca lista firmy Microsoft tutaj .
select cast(serverproperty('productversion') as varchar) as [result]
. Chodzi mi o to, że mogę wykonać powyższe za pośrednictwem ADO.NET, ExecuteScalar
a następnie przeanalizować ciąg wynikowy jako System.Version
obiekt. Ponadto przekonwertowanie go na numeryczne nadaje różne znaczenia numerom wersji, jeśli chodzi o końcowe zera i liczbę cyfr segmentu wersji, podczas gdy ciąg można przeanalizować do prawidłowego Version
obiektu bez utraty spójności każdego składnika wersji.
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
Oto fragment skryptu, którego używam do testowania, czy serwer jest w wersji 2005 lub nowszej
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
Uwaga: zaktualizowano w stosunku do oryginalnej odpowiedzi (patrz komentarz)
Artykuł KB, do którego link znajduje się w poście Joego, doskonale nadaje się do określenia, które dodatki Service Pack zostały zainstalowane dla dowolnej wersji. Zgodnie z tymi samymi wierszami, ten artykuł KB mapuje numery wersji do określonych poprawek i aktualizacji zbiorczych, ale dotyczy tylko SQL05 SP2 i nowszych.
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
Próbować
SELECT @@MICROSOFTVERSION / 0x01000000 AS MajorVersionNumber
Aby uzyskać więcej informacji, zobacz: Zapytanie o informacje o wersji / wydaniu
select substring(@@version,0,charindex(convert(varchar,SERVERPROPERTY('productversion')) ,@@version)+len(convert(varchar,SERVERPROPERTY('productversion'))))
Jeśli potrzebujesz tylko wersji głównej ze względu na T-SQL, poniżej podano rok wersji SQL Server 2000 lub nowszej.
SELECT left(ltrim(replace(@@Version,'Microsoft SQL Server','')),4)
Ten kod z wdziękiem obsługuje dodatkowe spacje i karty dla różnych wersji SQL Server.