SQL Server sürümü nasıl kontrol edilir


Yanıtlar:


229

Sürümü görmenin olası yolları şunlardır:

Yöntem 1: SQL Server örneğine bağlanın ve ardından aşağıdaki sorguyu çalıştırın:

Select @@version

Bu sorgunun çıktısının bir örneği aşağıdaki gibidir:

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

Yöntem 2: SQL Server Management Studio'da Object Explorer'ı kullanarak sunucuya bağlanın. Object Explorer bağlandıktan sonra, SQL Server'ın belirli bir örneğine bağlanmak için kullanılan kullanıcı adı ile birlikte sürüm bilgilerini parantez içinde gösterecektir.

Yöntem 3: Bu örnek için Errorlog dosyasının ilk birkaç satırına bakın. Varsayılan olarak, hata günlüğü Program Files \ Microsoft SQL Server\MSSQL.n\MSSQL\LOG\ERRORLOGve ERRORLOG.ndosyalar konumunda bulunur. Girişler aşağıdakilere benzeyebilir:

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

Gördüğünüz gibi, bu giriş sürüm, ürün seviyesi, 64-bit ve 32-bit, SQL Server'ın sürümü ve SQL Server'ın üzerinde çalıştığı işletim sistemi sürümü gibi ürün hakkında gerekli tüm bilgileri verir.

Yöntem 4: SQL Server örneğine bağlanın ve ardından aşağıdaki sorguyu çalıştırın:

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

Not Bu sorgu, herhangi bir SQL Server 2000 veya sonraki bir sürümün örneğiyle çalışır


7
Yöntem 4'ün Yöntem 1'den daha güvenilir olduğunu buldum - Yöntem 1 ve Yöntem 4'ün farklı sonuçlar verdiği, ancak Yöntem 4'ün doğru olduğu bir hizmet paketi doğru şekilde yüklenmemiş sunuculara sahiptim.
Kaganar

8
declare @sqlVers numeric(4,2)
select @sqlVers = left(cast(serverproperty('productversion') as varchar), 4)

SQL 2000, 2005, 2008 ve 2008R2 için sırasıyla 8.00, 9.00, 10.00 ve 10.50 verir.

Ayrıca, sistemin genişletilmiş prosedürünü deneyin xp_msver. Bu saklı yordamı şu şekilde çağırabilirsiniz:

exec master..xp_msver

3

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

Bu, Windows kimlik doğrulaması kullanarak yerel sunucu örneğine bağlanmak için SQLCMD'yi (SQL Server ile birlikte gelir) kullanır, bir sürüm kontrolü başarısız olursa bir hata atar ve > = 16 ise @@ERRORkomut satırı olarak döndürür ERRORLEVEL(ve eğer ikinci satır :ExitFailetikete giderse yukarıda bahsedilen ERRORLEVEL> = 1'dir).

Watchas, Gotchas ve Daha Fazla Bilgi

SQL 2000+ için bu bilgilerin çoğunu belirlemek için SERVERPROPERTY kullanabilirsiniz .

SQL 2008+ ProductMajorVersion& ProductMinorVersionözelliklerini desteklese de , ProductVersion2000 yılından beri kullanılmaktadır (bir özellik desteklenmiyorsa işlevin geri döndüğünü hatırlayarak NULL).

Daha önceki sürümlerle ilgileniyorsanız, PARSENAMEişlevi ayırmak için kullanabilirsiniz ProductVersion("bölümlerin" sağdan sola numaralandırıldığını hatırlayarak, yani PARSENAME('a.b.c', 1)geri döner c).

Ayrıca unutmamak PARSENAME('a.b.c', 4)döner NULL, SQL 2005 çünkü ve önceki yalnızca sürüm numarası 3 parça kullanılmış!

Dolayısıyla SQL 2008+ için şunları kullanabilirsiniz:

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

SQL 2000-2005 için şunları kullanabilirsiniz:

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)okunabilirliği artırmaya yönelik bir saldırıdır)

Dolayısıyla, SQL 2000+ sürümünün kontrolü şu şekilde olacaktır:

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

Yalnızca SQL 2008+ ile ilgileniyorsanız, bu çok daha basittir çünkü önceki sürümler için SERVERPROPERTY('ProductMajorVersion')döner NULL, böylece şunları kullanabilirsiniz:

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

Ve sırasıyla RTM / SP n / CTP n ve Dev / Std / Ent / vb. Belirlemek için ProductLevelve Edition(veya EngineEdition) özelliklerini kullanabilirsiniz .

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;

Bilginize, başlıca SQL sürüm numaraları şunlardır:

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

Ve bunların hepsi SQL Azure için de işe yarar!

DÜZENLENMİŞ: Daha düşük bir uyumluluğa ayarlanabileceği için DB uyumluluk seviyenizi de kontrol etmek isteyebilirsiniz .

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)

1

İşte sürümü bulmak için yaptığım şey İşte sürümü bulmak için yaptığım şey: sadece yazın SELECT @@versionve size sürümü verecektir.



0
select charindex(  'Express',@@version)

bu değer 0 ise ekspres sürüm değilse

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.