Jawaban:
Mencoba
SELECT @@VERSION
atau untuk SQL Server 2000 dan di atas yang berikut ini lebih mudah diurai :)
SELECT SERVERPROPERTY('productversion')
, SERVERPROPERTY('productlevel')
, SERVERPROPERTY('edition')
Saya tahu ini adalah posting yang lebih lama tetapi saya memperbarui kode yang ditemukan di tautan (yang sudah mati pada 2013-12-03) yang disebutkan dalam jawaban yang diposting oleh 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 IF ( @ver = '14' )
SELECT 'SQL Server 2017'
ELSE
SELECT 'Unsupported SQL Server Version'
Untuk SQL Server 2000 dan di atas, saya lebih suka parsing jawaban Joe berikut ini:
declare @sqlVers numeric(4,2)
select @sqlVers = left(cast(serverproperty('productversion') as varchar), 4)
Memberikan hasil sebagai berikut:
Versi Server Hasil 8.00 SQL 2000 9.00 SQL 2005 10.00 SQL 2008 10.50 SQL 2008R2 11.00 SQL 2012 12.00 SQL 2014
Daftar dasar nomor versi di sini , atau daftar lengkap dari Microsoft di sini .
select cast(serverproperty('productversion') as varchar) as [result]
. Maksud saya adalah bahwa saya dapat menjalankan di atas melalui ADO.NET ExecuteScalar
dan kemudian mengurai string hasil sebagai System.Version
objek. Juga, mengkonversikannya ke dalam numerik memberikan arti yang berbeda untuk nomor versi ketika datang ke angka nol dan angka segmen segmen versi, sementara string dapat diurai ke Version
objek yang valid tanpa kehilangan konsistensi dari setiap komponen versi.
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
Berikut sedikit skrip yang saya gunakan untuk pengujian jika server 2005 atau lebih baru
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
Catatan: diperbarui dari jawaban asli (lihat komentar)
Artikel KB yang ditautkan dalam posting Joe sangat bagus untuk menentukan paket layanan mana yang telah diinstal untuk versi apa pun. Sepanjang baris yang sama, artikel KB ini memetakan nomor versi ke hotfix spesifik dan pembaruan kumulatif, tetapi hanya berlaku untuk SQL05 SP2 dan yang lebih tinggi.
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
Mencoba
SELECT @@MICROSOFTVERSION / 0x01000000 AS MajorVersionNumber
Untuk informasi lebih lanjut, lihat: Meminta informasi versi / edisi
select substring(@@version,0,charindex(convert(varchar,SERVERPROPERTY('productversion')) ,@@version)+len(convert(varchar,SERVERPROPERTY('productversion'))))
Jika semua yang Anda inginkan adalah versi utama untuk alasan T-SQL, berikut ini memberi Anda tahun versi SQL Server untuk 2000 atau lebih baru.
SELECT left(ltrim(replace(@@Version,'Microsoft SQL Server','')),4)
Kode ini dengan anggun menangani ruang dan tab tambahan untuk berbagai versi SQL Server.