Dağıtılan SQL Server sürümünü belirlemenin olası yolları nelerdir?
SQL Server yazılımını kullanarak yapmaya çalıştım. Bunu bir komut satırı SQL deyimi kullanarak yapmak istiyorum.
Dağıtılan SQL Server sürümünü belirlemenin olası yolları nelerdir?
SQL Server yazılımını kullanarak yapmaya çalıştım. Bunu bir komut satırı SQL deyimi kullanarak yapmak istiyorum.
Yanıtlar:
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\ERRORLOG
ve ERRORLOG.n
dosyalar 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
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
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 @@ERROR
komut satırı olarak döndürür ERRORLEVEL
(ve eğer ikinci satır :ExitFail
etikete 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 , ProductVersion
2000 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, PARSENAME
iş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 ProductLevel
ve 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:
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)
Basitçe kullan
SELECT @@VERSION
Örnek çıktı
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: )
Kaynak: Sql sunucu sürümü nasıl kontrol edilir? (Çeşitli yollar açıklandı)