Cara memeriksa versi SQL Server

Jawaban:

227

Berikut ini adalah cara yang mungkin untuk melihat versi:

Metode 1: Sambungkan ke instance SQL Server, dan kemudian jalankan kueri berikut:

Select @@version

Contoh dari output dari query ini adalah sebagai berikut:

Microsoft SQL Server 2008 (SP1) - 10.0.2531.0 (X64)   Mar 29 2009 
10:11:52   Copyright (c) 1988-2008 Microsoft Corporation  Express 
Edition (64-bit) on Windows NT 6.1 <X64> (Build 7600: )

Metode 2: Sambungkan ke server dengan menggunakan Object Explorer di SQL Server Management Studio. Setelah Object Explorer terhubung, itu akan menampilkan informasi versi dalam tanda kurung, bersama dengan nama pengguna yang digunakan untuk menyambungkan ke contoh spesifik dari SQL Server.

Metode 3: Lihatlah beberapa baris pertama file Errorlog untuk contoh itu. Secara default, log kesalahan terletak di Program Files \ Microsoft SQL Server\MSSQL.n\MSSQL\LOG\ERRORLOGdan ERRORLOG.nfile. Entri dapat menyerupai yang berikut:

2011-03-27 22:31:33.50 Server      Microsoft SQL Server 2008 (SP1) - 10.0.2531.0 (X64)                 Mar 29 2009 10:11:52                 Copyright (c) 1988-2008 Microsoft Corporation                Express Edition (64-bit) on Windows NT 6.1 <X64> (Build 7600: )

Seperti yang Anda lihat, entri ini memberikan semua informasi yang diperlukan tentang produk, seperti versi, level produk, 64-bit versus 32-bit, edisi SQL Server, dan versi OS yang menjalankan SQL Server.

Metode 4: Sambungkan ke instance dari SQL Server, dan kemudian jalankan kueri berikut:

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

Catatan Permintaan ini berfungsi dengan instance SQL Server 2000 atau versi yang lebih baru

Imran
sumber
6
Saya menemukan Metode 4 lebih dapat diandalkan daripada Metode 1 - Saya punya server yang tidak mendapatkan paket layanan yang diinstal dengan benar di mana Metode 1 dan Metode 4 mengembalikan hasil yang berbeda, tetapi Metode 4 benar.
Kaganar
8
declare @sqlVers numeric(4,2)
select @sqlVers = left(cast(serverproperty('productversion') as varchar), 4)

Memberikan 8.00, 9.00, 10.00 dan 10.50 masing-masing untuk SQL 2000, 2005, 2008 dan 2008R2.

Juga, Coba prosedur yang diperluas sistem xp_msver. Anda dapat memanggil prosedur tersimpan ini seperti

exec master..xp_msver
Lingga
sumber
2

TL; DR

SQLCMD -S (LOCAL) -E -V 16 -Q "IF(ISNULL(CAST(SERVERPROPERTY('ProductMajorVersion') AS INT),0)<11) RAISERROR('You need SQL 2012 or later!',16,1)"
IF ERRORLEVEL 1 GOTO :ExitFail

Ini menggunakan SQLCMD (dilengkapi dengan SQL Server) untuk menghubungkan ke instance server lokal menggunakan Windows auth, melempar kesalahan jika pemeriksaan versi gagal dan mengembalikan @@ERRORsebagai baris perintah ERRORLEVELjika> = 16 (dan baris kedua pergi ke :ExitFaillabel jika tersebut di atas ERRORLEVELadalah> = 1).

Watchas, Gotchas & Info Lebih Lanjut

Untuk SQL 2000+ Anda dapat menggunakan SERVERPROPERTY untuk menentukan banyak info ini.

Sementara SQL 2008+ mendukung ProductMajorVersion& ProductMinorVersionproperties, ProductVersiontelah ada sejak tahun 2000 (mengingat bahwa jika sebuah properti tidak didukung, fungsi akan kembali NULL).

Jika Anda tertarik pada versi sebelumnya, Anda dapat menggunakan PARSENAMEfungsi ini untuk membagi ProductVersion(mengingat "bagian-bagian" diberi nomor dari kanan ke kiri yaitu PARSENAME('a.b.c', 1)pengembalian c).

Juga ingat bahwa PARSENAME('a.b.c', 4)kembali NULL, karena SQL 2005 dan sebelumnya hanya menggunakan 3 bagian dalam nomor versi!

Jadi untuk SQL 2008+ Anda cukup menggunakan:

SELECT
    SERVERPROPERTY('ProductVersion') AS ProductVersion,
    CAST(SERVERPROPERTY('ProductMajorVersion')  AS INT) AS ProductMajorVersion,
    CAST(SERVERPROPERTY ('ProductMinorVersion') AS INT) AS ProductMinorVersion;

Untuk SQL 2000-2005 Anda dapat menggunakan:

SELECT
    SERVERPROPERTY('ProductVersion') AS ProductVersion,
    CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME), CASE WHEN SERVERPROPERTY('ProductVersion') IS NULL THEN 3 ELSE 4 END) AS INT) AS ProductVersion_Major,
    CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME), CASE WHEN SERVERPROPERTY('ProductVersion') IS NULL THEN 2 ELSE 3 END) AS INT) AS ProductVersion_Minor,
    CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME), CASE WHEN SERVERPROPERTY('ProductVersion') IS NULL THEN 1 ELSE 2 END) AS INT) AS ProductVersion_Revision,
    CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME), CASE WHEN SERVERPROPERTY('ProductVersion') IS NULL THEN 0 ELSE 1 END) AS INT) AS ProductVersion_Build;

( PARSENAME(...,0)adalah hack untuk meningkatkan keterbacaan)

Jadi cek untuk versi SQL 2000+ adalah:

IF (CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME), CASE WHEN SERVERPROPERTY('ProductVersion') IS NULL THEN 3 ELSE 4 END) AS INT) < 10) -- SQL2008
OR (
    (CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME), CASE WHEN SERVERPROPERTY('ProductVersion') IS NULL THEN 3 ELSE 4 END) AS INT) = 10) -- SQL2008
AND (CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME), CASE WHEN SERVERPROPERTY('ProductVersion') IS NULL THEN 2 ELSE 1 END) AS INT) < 5)  -- R2 (this may need to be 50)
   )
    RAISERROR('You need SQL 2008R2 or later!', 16, 1);

Ini jauh lebih sederhana jika Anda hanya tertarik pada SQL 2008+ karena SERVERPROPERTY('ProductMajorVersion')pengembalian NULLuntuk versi sebelumnya, sehingga Anda dapat menggunakan:

IF (ISNULL(CAST(SERVERPROPERTY('ProductMajorVersion') AS INT), 0) < 11) -- SQL2012
    RAISERROR('You need SQL 2012 or later!', 16, 1);

Dan Anda dapat menggunakan properti ProductLeveldan Edition(atau EngineEdition) masing-masing untuk menentukan RTM / SP n / CTP n dan Dev / Std / Ent / dll.

SELECT
    CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME) AS ProductVersion,
    CAST(SERVERPROPERTY('ProductLevel') AS SYSNAME)   AS ProductLevel,
    CAST(SERVERPROPERTY('Edition') AS SYSNAME)        AS Edition,
    CAST(SERVERPROPERTY('EngineEdition') AS INT)      AS EngineEdition;

FYI nomor versi SQL utama adalah:

  • 8 = SQL 2000
  • 9 = SQL 2005
  • 10 = SQL 2008 (dan 10.5 = SQL 2008R2)
  • 11 = SQL 2012
  • 12 = SQL 2014
  • 13 = SQL 2016
  • 14 = SQL 2017

Dan ini semua bekerja untuk SQL Azure juga!

Diedit: Anda mungkin juga ingin memeriksa tingkat kompatibilitas DB Anda karena itu dapat diatur ke kompatibilitas yang lebih rendah.

IF EXISTS (SELECT * FROM sys.databases WHERE database_id=DB_ID() AND [compatibility_level] < 110)
    RAISERROR('Database compatibility level must be SQL2008R2 or later (110)!', 16, 1)
AndrewD
sumber
1

Inilah yang telah saya lakukan untuk menemukan versi Inilah yang telah saya lakukan untuk menemukan versi: cukup tulis SELECT @@versiondan itu akan memberi Anda versi.

Imad Ullah
sumber
0
select charindex(  'Express',@@version)

jika nilai ini 0 bukan edisi ekspres

R.Alonso
sumber