Yanıtlar:
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
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'
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 .
select cast(serverproperty('productversion') as varchar) as [result]
. Demek istediğim, yukarıdakileri ADO.NET aracılığıyla çalıştırabilir ExecuteScalar
ve ardından sonuç dizesini bir System.Version
nesne 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 .
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
İş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)
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.
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
Deneyin
SELECT @@MICROSOFTVERSION / 0x01000000 AS MajorVersionNumber
Daha fazla bilgi için bkz: Sürüm / basım bilgilerini sorgulama
select substring(@@version,0,charindex(convert(varchar,SERVERPROPERTY('productversion')) ,@@version)+len(convert(varchar,SERVERPROPERTY('productversion'))))
İ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.