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

Joe Kuemerle
źródło
1
Drugi działa dla mnie i dodaję, aby sprawdzić na Wikipedii, aby zrozumieć, że 8.00.xx oznacza serwer SQL 2000
pdem
30

WYBIERZ WERSJĘ @@

Brannon
źródło
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'
Mark Kram
źródło
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 .

Geoff
źródło
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
Alex
źródło
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)

Bruce Chapman
źródło
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]
Zia
źródło
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.

Matt
źródło
1

Spróbuj tego:

if (SELECT LEFT(CAST(SERVERPROPERTY('productversion') as varchar), 2)) = '10'
BEGIN
wybryk
źródło
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
przejście dla pieszych
źródło
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).

Nux
źródło
1

Próbować

SELECT @@MICROSOFTVERSION / 0x01000000 AS MajorVersionNumber

Aby uzyskać więcej informacji, zobacz: Zapytanie o informacje o wersji / wydaniu

VAV
źródło
1
select substring(@@version,0,charindex(convert(varchar,SERVERPROPERTY('productversion')) ,@@version)+len(convert(varchar,SERVERPROPERTY('productversion')))) 
Vikrant Bagal
źródło
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.

Allen Ackerman
źródło
0

Spróbuj tego:

SELECT @@VERSION[server], SERVERPROPERTY('productversion'), SERVERPROPERTY ('productlevel'), SERVERPROPERTY ('edition')
Arif
źródło
-1

Spróbuj tego:

SELECT
    'the sqlserver is ' + substring(@@VERSION, 21, 5) AS [sql version]
pruthvi
źródło