Czy istnieje procedura przechowywana w systemie, aby uzyskać wersję #?Jak sprawdzić, jaka wersja SQL Server dla bazy danych za pomocą TSQL?
Odpowiedz
Spróbuj
SELECT @@VERSION
lub SQL Server 2000 i powyżej następujących łatwiej jest analizować :)
SELECT SERVERPROPERTY('productversion')
, SERVERPROPERTY('productlevel')
, SERVERPROPERTY('edition')
Drugi działa dla mnie, i dodaję do sprawdzenia w Wikipedii, aby zrozumieć, że 8.00.xx oznacza serwer SQL 2000 – pdem
SELECT @@ VERSION
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.
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)
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ą. –
Spróbuj:
if (SELECT LEFT(CAST(SERVERPROPERTY('productversion') as varchar), 2)) = '10'
BEGIN
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.
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. –
To jest złe. '12.00' jest równe' SQL Server 2014'. – l33t
@ l33t: Dzięki, naprawione. – Geoff
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'
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
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.).
Jest inna rozszerzone procedury przechowywanej, które mogą być wykorzystane, aby zobaczyć informacje o wersji:
exec [master].sys.[xp_msver]
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
wybierz zwanej dalej 'sqlserver jest' + podciąg (@@ wersja 21,5) „wersja SQL "
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.
Spróbuj tego:
SELECT @@VERSION[server], SERVERPROPERTY('productversion'), SERVERPROPERTY ('productlevel'), SERVERPROPERTY ('edition')
Spróbuj
SELECT @@MICROSOFTVERSION/0x01000000 AS MajorVersionNumber
Aby uzyskać więcej informacji, patrz: Querying for version/edition info
http://blog.devstone.com/aaron/default,date,2006-12 -15.aspx –