2008-09-12 13 views

Odpowiedz

215

Spróbuj

SELECT @@VERSION 

lub SQL Server 2000 i powyżej następujących łatwiej jest analizować :)

SELECT SERVERPROPERTY('productversion') 
    , SERVERPROPERTY('productlevel') 
    , SERVERPROPERTY('edition') 

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

+1

Drugi działa dla mnie, i dodaję do sprawdzenia w Wikipedii, aby zrozumieć, że 8.00.xx oznacza serwer SQL 2000 – pdem

1

The Artykuł KB powiązany w Joe's post jest świetny do określania wh ich dodatki Service Pack zostały zainstalowane dla dowolnej wersji. Wzdłuż tych samych linii this KB article mapuje numery wersji do konkretnych poprawek i zbiorczych aktualizacji, ale dotyczy tylko SQL05 SP2 i nowszych.

2

Oto nieco skrypt używać do testowania, czy serwer jest 2005 lub później

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: aktualizowany od oryginalnego odpowiedź (patrz komentarz)

+0

Po prostu nie działa to sql 2008, ponieważ "10" jest mniejsze niż "9". Możesz zmienić wartość w zaktualizowanej odpowiedzi na 8, 9, 10 lub cokolwiek, co musisz przetestować jako wartość minimalną. –

1

Spróbuj:

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

Dla programu SQL Server 2000 i nowszego, wolę następujące parsowanie odpowiedzi Joe:

declare @sqlVers numeric(4,2) 
select @sqlVers = left(cast(serverproperty('productversion') as varchar), 4) 

daje wyniki w następujący sposób:

 
Result Server Version 
8.00  SQL 2000 
9.00  SQL 2005 
10.00 SQL 2008 
10.50 SQL 2008R2 
11.00 SQL 2012 
12.00 SQL 2014 

Podstawowe listę numerów wersji here lub wyczerpującej listy z Microsoft here.

+0

Podoba mi się to, ładne, proste i możliwe do ponownego wykorzystania we wszystkich wersjach serwerowych. Użyłem nieco zmodyfikowanej wersji powyższego: 'select cast (serverproperty ('productversion') jako varchar) jako [result]'. Chodzi mi o to, że mogę wykonać powyższe poprzez "ExecuteScalar" ADO.NET, a następnie przeanalizować ciąg wyniku jako obiekt 'System.Version'. Ponadto konwertowanie go na numeryczne nadaje różne numery wersjom, jeśli chodzi o końcowe zera i cyfry segmentów wersji, podczas gdy łańcuch może zostać sparsowany do poprawnego obiektu "Version" bez utraty spójności każdego komponentu wersji. –

+0

To jest złe. '12.00' jest równe' SQL Server 2014'. – l33t

+0

@ l33t: Dzięki, naprawione. – Geoff

23

wiem, że to starszy post ale ja uaktualniony kod znajdujący się w link (który nie żyje od dnia 2013-12-03) wymienione w answer wysłane przez Matt Rogish:

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 
    SELECT 'Unsupported SQL Server Version' 
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

tylko coraz główną wersję SQL Server w pojedynczy wybrać:

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

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

3

Jest inna rozszerzone procedury przechowywanej, które mogą być wykorzystane, aby zobaczyć informacje o wersji:

exec [master].sys.[xp_msver] 
3
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' ('[email protected] + N'), ' + @Edition + ' - ' + @ProductVersion; 

END 
GO 
-1

wybierz zwanej dalej 'sqlserver jest' + podciąg (@@ wersja 21,5) „wersja SQL "

0

Jeśli wszystko, czego potrzebujesz, to główna wersja z powodów T-SQL, poniżej znajdziesz rok wersji SQL Server 2000 lub nowszej.

SELECT left(ltrim(replace(@@Version,'Microsoft SQL Server','')),4)

Ten kod wdzięcznie obsługuje dodatkowe spacje i tabulatory różnych wersjach SQL Server.

0

Spróbuj tego:

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