Bagaimana Anda memeriksa versi SQL Server untuk database yang menggunakan TSQL?

Jawaban:

234

Mencoba

SELECT @@VERSION 

atau untuk SQL Server 2000 dan di atas yang berikut ini lebih mudah diurai :)

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

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

Joe Kuemerle
sumber
1
Yang kedua berfungsi untuk saya, dan saya tambahkan untuk memeriksa Wikipedia untuk memahami bahwa 8.00.xx berarti SQL server 2000
pdem
30

SELECT @@ VERSION

Brannon
sumber
28

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'
Mark Kram
sumber
14

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 .

Geoff
sumber
Saya suka ini, baik, sederhana dan dapat digunakan kembali di seluruh versi server. Saya menggunakan versi modifikasi dari atas: select cast(serverproperty('productversion') as varchar) as [result]. Maksud saya adalah bahwa saya dapat menjalankan di atas melalui ADO.NET ExecuteScalardan kemudian mengurai string hasil sebagai System.Versionobjek. 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 Versionobjek yang valid tanpa kehilangan konsistensi dari setiap komponen versi.
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
Alex
sumber
3

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)

Bruce Chapman
sumber
Baru ditemukan ini tidak berfungsi sql 2008 karena '10' kurang dari '9'. Anda dapat mengubah nilai dalam jawaban yang diperbarui untuk menggunakan 8, 9, 10 atau apa pun yang Anda butuhkan untuk menguji sebagai nilai minimum
Bruce Chapman
3

Ada lagi Stored Procedure tambahan yang dapat digunakan untuk melihat info Versi:

exec [master].sys.[xp_msver]
Zia
sumber
2

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.

Mat
sumber
1

Coba ini:

if (SELECT LEFT(CAST(SERVERPROPERTY('productversion') as varchar), 2)) = '10'
BEGIN
aneh
sumber
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
penyeberangan
sumber
1

Hanya mendapatkan versi SQL Server utama dalam satu pilihan:

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

Kembali 8untuk SQL 2000, 9untuk SQL 2005 dan seterusnya (diuji hingga 2012).

Nux
sumber
1

Mencoba

SELECT @@MICROSOFTVERSION / 0x01000000 AS MajorVersionNumber

Untuk informasi lebih lanjut, lihat: Meminta informasi versi / edisi

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

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.

Allen Ackerman
sumber
0

Coba ini:

SELECT @@VERSION[server], SERVERPROPERTY('productversion'), SERVERPROPERTY ('productlevel'), SERVERPROPERTY ('edition')
Arif
sumber
-1

Coba ini:

SELECT
    'the sqlserver is ' + substring(@@VERSION, 21, 5) AS [sql version]
pruthvi
sumber