Jakie są możliwe sposoby określenia wdrożonej wersji programu SQL Server?
Próbowałem to zrobić za pomocą oprogramowania SQL Server. Chcę to zrobić za pomocą instrukcji SQL wiersza poleceń.
Jakie są możliwe sposoby określenia wdrożonej wersji programu SQL Server?
Próbowałem to zrobić za pomocą oprogramowania SQL Server. Chcę to zrobić za pomocą instrukcji SQL wiersza poleceń.
Odpowiedzi:
Oto możliwe sposoby wyświetlania wersji:
Metoda 1: Połącz się z wystąpieniem programu SQL Server, a następnie uruchom następującą kwerendę:
Select @@version
Przykład wyniku tego zapytania jest następujący:
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: )
Metoda 2: Połącz się z serwerem za pomocą Eksploratora obiektów w SQL Server Management Studio. Po podłączeniu Object Explorer wyświetli informacje o wersji w nawiasach, wraz z nazwą użytkownika używaną do łączenia się z konkretną instancją SQL Server.
Metoda 3: Spójrz na kilka pierwszych wierszy pliku dziennika błędów dla tego wystąpienia. Domyślnie dziennik błędów znajduje się w lokalizacji Program Files \ Microsoft SQL Server\MSSQL.n\MSSQL\LOG\ERRORLOG
and ERRORLOG.n
files. Wpisy mogą wyglądać następująco:
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: )
Jak widać, ten wpis zawiera wszystkie niezbędne informacje o produkcie, takie jak wersja, poziom produktu, wersja 64-bitowa i 32-bitowa, wydanie programu SQL Server oraz wersja systemu operacyjnego, na którym działa SQL Server.
Metoda 4: Połącz się z wystąpieniem programu SQL Server, a następnie uruchom następującą kwerendę:
SELECT SERVERPROPERTY('productversion'), SERVERPROPERTY ('productlevel'), SERVERPROPERTY ('edition')
Uwaga Ta kwerenda działa z każdym wystąpieniem programu SQL Server 2000 lub nowszej wersji
declare @sqlVers numeric(4,2)
select @sqlVers = left(cast(serverproperty('productversion') as varchar), 4)
Podaje odpowiednio 8,00, 9,00, 10,00 i 10,50 dla SQL 2000, 2005, 2008 i 2008R2.
Wypróbuj również rozszerzoną procedurę systemu xp_msver
. Możesz wywołać tę procedurę składowaną, na przykład
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
Używa SQLCMD (dostarczanego z SQL Server) do łączenia się z lokalną instancją serwera za pomocą Windows auth, zgłasza błąd, jeśli sprawdzenie wersji się nie powiedzie i zwraca @@ERROR
jako wiersz poleceń, ERRORLEVEL
jeśli> = 16 (a druga linia przechodzi do :ExitFail
etykiety, jeśli wspomniany powyżej ERRORLEVEL
to> = 1).
Watchas, Gotchas i więcej informacji
W przypadku SQL 2000+ możesz użyć parametru SERVERPROPERTY, aby określić wiele z tych informacji.
Chociaż SQL 2008+ obsługuje właściwości ProductMajorVersion
& ProductMinorVersion
, ProductVersion
istnieje od 2000 roku (należy pamiętać, że jeśli właściwość nie jest obsługiwana, funkcja zwraca NULL
).
Jeśli jesteś zainteresowany wcześniejszymi wersjami, możesz użyć PARSENAME
funkcji do podzielenia ProductVersion
(pamiętając, że "części" są numerowane od prawej do lewej, czyli PARSENAME('a.b.c', 1)
zwroty c
).
Pamiętaj też, że PARSENAME('a.b.c', 4)
zwraca NULL
, ponieważ SQL 2005 i wcześniejsze wersje zawierały tylko 3 części w numerze wersji!
W przypadku SQL 2008+ możesz po prostu użyć:
SELECT
SERVERPROPERTY('ProductVersion') AS ProductVersion,
CAST(SERVERPROPERTY('ProductMajorVersion') AS INT) AS ProductMajorVersion,
CAST(SERVERPROPERTY ('ProductMinorVersion') AS INT) AS ProductMinorVersion;
W przypadku SQL 2000-2005 możesz użyć:
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)
to trik poprawiający czytelność)
Tak więc sprawdzenie wersji SQL 2000+ wyglądałoby tak:
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);
Jest to o wiele prostsze, jeśli interesuje Cię tylko SQL 2008+, ponieważ SERVERPROPERTY('ProductMajorVersion')
zwraca się NULL
z wcześniejszymi wersjami, więc możesz użyć:
IF (ISNULL(CAST(SERVERPROPERTY('ProductMajorVersion') AS INT), 0) < 11) -- SQL2012
RAISERROR('You need SQL 2012 or later!', 16, 1);
I możesz użyć właściwości ProductLevel
i Edition
(lub EngineEdition
), aby określić odpowiednio RTM / SP n / CTP n i Dev / Std / Ent / etc.
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, główne numery wersji SQL to:
I to wszystko działa również w przypadku SQL Azure!
EDYTOWANE: Możesz również chcieć sprawdzić poziom zgodności z bazą danych, ponieważ może być ustawiony na niższą kompatybilność.
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)
Po prostu użyj
SELECT @@VERSION
Przykładowe dane wyjściowe
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: )
Źródło: Jak sprawdzić wersję serwera sql? (Wyjaśniono różne sposoby)