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


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


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'

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 .


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

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)


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]

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.


1

Coba ini:

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

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).


1

Mencoba

SELECT @@MICROSOFTVERSION / 0x01000000 AS MajorVersionNumber

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


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

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.


0

Coba ini:

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

-1

Coba ini:

SELECT
    'the sqlserver is ' + substring(@@VERSION, 21, 5) AS [sql version]
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.