Apa cara yang mungkin untuk menentukan versi SQL Server yang digunakan?
Saya sudah mencoba melakukannya menggunakan perangkat lunak SQL Server. Saya ingin melakukannya menggunakan pernyataan SQL baris perintah.
Apa cara yang mungkin untuk menentukan versi SQL Server yang digunakan?
Saya sudah mencoba melakukannya menggunakan perangkat lunak SQL Server. Saya ingin melakukannya menggunakan pernyataan SQL baris perintah.
Jawaban:
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\ERRORLOG
dan ERRORLOG.n
file. 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
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
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 @@ERROR
sebagai baris perintah ERRORLEVEL
jika> = 16 (dan baris kedua pergi ke :ExitFail
label jika tersebut di atas ERRORLEVEL
adalah> = 1).
Watchas, Gotchas & Info Lebih Lanjut
Untuk SQL 2000+ Anda dapat menggunakan SERVERPROPERTY untuk menentukan banyak info ini.
Sementara SQL 2008+ mendukung ProductMajorVersion
& ProductMinorVersion
properties, ProductVersion
telah ada sejak tahun 2000 (mengingat bahwa jika sebuah properti tidak didukung, fungsi akan kembali NULL
).
Jika Anda tertarik pada versi sebelumnya, Anda dapat menggunakan PARSENAME
fungsi 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 NULL
untuk 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 ProductLevel
dan 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:
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)
Cukup gunakan
SELECT @@VERSION
Output sampel
Microsoft SQL Server 2012 - 11.0.2100.60 (X64)
Feb 10 2012 19:39:15
Copyright (c) Microsoft Corporation
Express Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: )
Sumber: Bagaimana cara memeriksa versi sql server? (Berbagai cara dijelaskan)