Jak sprawdzić, która wersja SQL Server jest przeznaczona dla bazy danych używającej TSQL?


Odpowiedzi:


234

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')

Od: http://support.microsoft.com/kb/321185


1
Drugi działa dla mnie i dodaję, aby sprawdzić na Wikipedii, aby zrozumieć, że 8.00.xx oznacza serwer SQL 2000
pdem


28

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'

14

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 .


Podoba mi się to, ładne, proste i wielokrotnego użytku w różnych wersjach serwera. Kiedyś nieco zmodyfikowaną wersję powyższego: select cast(serverproperty('productversion') as varchar) as [result]. Chodzi mi o to, że mogę wykonać powyższe za pośrednictwem ADO.NET, ExecuteScalara następnie przeanalizować ciąg wynikowy jako System.Versionobiekt. 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 Versionobiektu bez utraty spójności każdego składnika wersji.
Ivaylo Slavov

4
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

3

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)


Właśnie stwierdziłem, że to nie działa sql 2008, ponieważ „10” jest mniejsze niż „9”. Możesz zmienić wartość w zaktualizowanej odpowiedzi, aby użyć 8, 9, 10 lub cokolwiek innego, czego potrzebujesz, aby przetestować jako wartość minimalną
Bruce Chapman,

3

Istnieje inna rozszerzona procedura składowana, której można użyć do wyświetlenia informacji o wersji:

exec [master].sys.[xp_msver]

2

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.


1

Spróbuj tego:

if (SELECT LEFT(CAST(SERVERPROPERTY('productversion') as varchar), 2)) = '10'
BEGIN

1
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

1

Uzyskiwanie tylko głównej wersji programu SQL Server za jednym razem:

SELECT  SUBSTRING(ver, 1, CHARINDEX('.', ver) - 1)
FROM (SELECT CAST(serverproperty('ProductVersion') AS nvarchar) ver) as t

Zwraca 8dla SQL 2000, 9SQL 2005 i tak dalej (testowane do 2012).



1
select substring(@@version,0,charindex(convert(varchar,SERVERPROPERTY('productversion')) ,@@version)+len(convert(varchar,SERVERPROPERTY('productversion')))) 

0

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.


0

Spróbuj tego:

SELECT @@VERSION[server], SERVERPROPERTY('productversion'), SERVERPROPERTY ('productlevel'), SERVERPROPERTY ('edition')

-1

Spróbuj tego:

SELECT
    'the sqlserver is ' + substring(@@VERSION, 21, 5) AS [sql version]
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.