TSQL kullanan bir veritabanı için SQL Server'ın hangi sürümünü nasıl kontrol edersiniz?


Yanıtlar:


234

Deneyin

SELECT @@VERSION 

veya SQL Server 2000 ve üzeri için aşağıdakilerin ayrıştırılması daha kolaydır :)

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

Gönderen: http://support.microsoft.com/kb/321185


1
İkincisi benim için çalışıyor ve 8.00.xx'in SQL server 2000 anlamına geldiğini anlamak için Wikipedia'yı kontrol etmeyi ekledim
pdem


28

Bunun daha eski bir gönderi olduğunu biliyorum, ancak Matt Rogish tarafından gönderilen cevapta belirtilen bağlantıda bulunan (2013-12-03 itibariyle ölü olan) kodu güncelledim :

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

SQL Server 2000 ve üstü için, Joe'nun cevabının aşağıdaki ayrıştırılmasını tercih ederim:

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

Sonuçları şu şekilde verir:

Sonuç Sunucusu Sürümü
8.00 SQL 2000
9.00 SQL 2005
10.00 SQL 2008
10.50 SQL 2008R2
11.00 SQL 2012
12.00 SQL 2014

Sürüm numaralarının temel listesi burada veya burada Microsoft'tan kapsamlı liste .


Bunu beğendim, hoş, basit ve sunucu sürümleri arasında yeniden kullanılabilir. Yukarıda biraz değiştirilmiş bir versiyonu kullanılmıştır: select cast(serverproperty('productversion') as varchar) as [result]. Demek istediğim, yukarıdakileri ADO.NET aracılığıyla çalıştırabilir ExecuteScalarve ardından sonuç dizesini bir System.Versionnesne olarak ayrıştırabilirim . Ayrıca, onu sayısal olarak ifade etmek, sondaki sıfırlar ve sürüm segment basamak sayısı söz konusu olduğunda sürüm numaralarına farklı anlamlar verirken, bir dize Version, her sürüm bileşeninin tutarlılığını kaybetmeden geçerli bir nesneye ayrıştırılabilir .
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

İşte bir sunucunun 2005 veya sonrası olup olmadığını test etmek için kullandığım bir komut dosyası.

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

Not: orijinal cevaptan güncellendi (yoruma bakın)


Sadece bunun 2008 sql çalışmadığını buldum çünkü '10', '9'dan küçük. Güncellenmiş yanıttaki değeri, 8, 9, 10 veya minimum değer olarak test etmeniz gereken her şeyi kullanacak şekilde değiştirebilirsiniz
Bruce Chapman

3

Sürüm bilgilerini görmek için kullanılabilecek başka bir genişletilmiş Depolanan Prosedür vardır:

exec [master].sys.[xp_msver]

2

Joe'nun gönderisinde bağlantısı verilen KB makalesi , herhangi bir sürüm için hangi hizmet paketlerinin yüklü olduğunu belirlemek için harikadır. Aynı satırlar boyunca, bu KB makalesi sürüm numaralarını belirli düzeltmeler ve toplu güncelleştirmelerle eşleştirir, ancak yalnızca SQL05 SP2 ve sonraki sürümler için geçerlidir.


1

Bunu dene:

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

Tek bir seçimde yalnızca ana SQL Server sürümünü alma:

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

İade 8SQL 2000, 9SQL 2005 ve benzeri (2012 yılına kadar test).



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

0

İstediğiniz tek şey T-SQL nedenleriyle ana sürümse, aşağıda size 2000 veya sonrası için SQL Server sürümünün yılını verir.

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

Bu kod, SQL Server'ın çeşitli sürümleri için fazladan boşlukları ve sekmeleri incelikle işler.


0

Bunu dene:

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

-1

Bunu dene:

SELECT
    'the sqlserver is ' + substring(@@VERSION, 21, 5) AS [sql version]
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.