Klucz wersji SQL Server to wpis rejestru wskazujący dokładny numer wydania zainstalowanego systemu bazodanowego.
Rola klucza wersji w SQL Server
Klucz wersji SQL Server jest elementem rejestru systemu Windows, w którym instalacja SQL Server przechowuje informacje pozwalające rozpoznać wydanie oraz stan aktualizacji określonej instancji. Nie chodzi o klucz licencyjny ani o hasło dostępu do bazy danych. W tym kontekście słowo „klucz” oznacza klucz rejestru, czyli strukturę przechowującą wartości konfiguracyjne instalacji. Jedną z istotnych wartości jest CurrentVersion, wskazująca numer wersji przypisany do komponentu lub instancji aparatu Database Engine.
SQL Server może mieć na jednym komputerze więcej niż jedną instancję, dlatego sama nazwa produktu nie zawsze wystarcza do prawidłowej identyfikacji instalacji. Rejestr rozróżnia identyfikator instancji, nazwę instancji oraz komponenty dodatkowe. W praktyce wartości związane z aparatem bazy danych znajdują się w gałęzi HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server, w podkluczach zależnych od identyfikatora instancji. Przykładowy identyfikator może mieć postać MSSQL15.MSSQLSERVER, ale jego rzeczywista wartość zależy od zainstalowanej generacji SQL Server i sposobu instalacji.
CurrentVersion, Version i PatchLevel
W dokumentacji instalacyjnej SQL Server można spotkać kilka wartości opisujących wersję. CurrentVersion jest wartością używaną do wskazania bieżącej wersji komponentu. W podkluczach Setup mogą występować także wartości Version oraz PatchLevel. Nie należy traktować ich jako całkowicie zamiennych. Version opisuje wersję produktu zapisaną przez instalator, natomiast PatchLevel może wskazywać poziom zastosowanej aktualizacji, na przykład określonej poprawki zbiorczej.
Numer produktu SQL Server ma zwykle kilka części, na przykład 16.0.4135.4. Pierwsza część identyfikuje główną generację silnika, a kolejne części wskazują bardziej szczegółową kompilację. Sama wartość CurrentVersion nie powinna być jednak interpretowana bez sprawdzenia, którego komponentu dotyczy dany podklucz. SQL Server obejmuje między innymi Database Engine, SQL Server Agent, Analysis Services i inne składniki, a każdy z nich może mieć własne wpisy wersji. Odczyt z niewłaściwej gałęzi może więc prowadzić do wniosku dotyczącego innego komponentu niż ten, który faktycznie działa.
Weryfikacja numeru działającej instancji
Rejestr jest przydatny przede wszystkim przy analizie instalacji, która nie uruchamia się poprawnie albo wymaga sprawdzenia bez korzystania z graficznych narzędzi administracyjnych. Jeżeli instancja SQL Server działa, bardziej bezpośrednią metodą jest zapytanie Transact-SQL wykonywane w tej konkretnej instancji: SELECT SERVERPROPERTY('ProductVersion') AS ProductVersion, SERVERPROPERTY('ProductLevel') AS ProductLevel, SERVERPROPERTY('Edition') AS Edition;. Funkcja SERVERPROPERTY pobiera informacje z działającego aparatu bazy danych, dlatego wynik odnosi się do instancji, z którą nawiązano połączenie.
Do odczytu wpisów rejestru z poziomu samego SQL Server można wykorzystać dynamiczny obiekt zarządzania sys.dm_server_registry. Przykładowe zapytanie SELECT registry_key, value_name, value_data FROM sys.dm_server_registry WHERE value_name = N'CurrentVersion'; zwraca klucz, nazwę wartości i jej dane dla bieżącej instancji. W SQL Server 2022 i nowszych dostęp do tego obiektu wymaga uprawnienia VIEW SERVER PERFORMANCE STATE. Nie należy mylić tego mechanizmu z odczytem dowolnych danych rejestru przez aplikację: zakres zwracanych informacji jest kontrolowany przez silnik SQL Server i zależy od uprawnień.
Znaczenie wpisu przy analizie instalacji
Numer zapisany w rejestrze pomaga ustalić, czy na komputerze znajduje się oczekiwana generacja SQL Server oraz czy analizowana jest właściwa instancja. Ma to znaczenie podczas diagnozowania niezgodności między aplikacją a silnikiem bazy danych, sprawdzania wymagań konkretnej wersji programu albo porównywania stanu instalacji przed i po zastosowaniu aktualizacji. Sam wpis nie opisuje jednak kondycji baz danych, poprawności schematu, dostępności portu ani działania usług systemowych. Potwierdza jedynie informacje zapisane dla instalacji lub odczytane przez silnik.
Przy diagnostyce trzeba porównać co najmniej trzy elementy: identyfikator instancji w rejestrze, nazwę usługi SQL Server oraz wynik SERVERPROPERTY('ProductVersion') uzyskany z działającego połączenia. Różnica między tymi informacjami może wynikać z obecności wielu instancji, aktualizacji tylko wybranego komponentu, odczytu niewłaściwej gałęzi rejestru albo użycia innego widoku rejestru dla aplikacji 32-bitowej i 64-bitowej. Zmiana wpisów ręcznie w Edytorze rejestru nie jest właściwą metodą aktualizowania SQL Server, ponieważ wersja jest ustalana przez instalator i pakiety aktualizacyjne. Wartość należy traktować jako dane diagnostyczne, a nie jako ustawienie służące do zmiany wersji silnika.