Serwisanci dostępni teraz · czynne całą dobę, także w weekendy i świętaWarszawa i okolice · dojazd bezpłatny
Darmowa diagnoza laptopa
Darmowa diagnoza laptopa
Dojazd do klienta bezpłatnie
Dojazd do klienta bezpłatnie
Laptopy zastępcze bezpłatnie
Laptopy zastępcze bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie

Funkcja systemowa

Termin Definicja
Funkcja systemowa

Funkcja systemowa to wbudowana funkcja SQL Server dostarczająca informacji o stanie serwera lub bieżącej sesji.

Rola funkcji systemowych w SQL Server

Funkcja systemowa w SQL Server jest wbudowanym mechanizmem języka T-SQL, który zwraca wartość wyznaczaną na podstawie informacji znanych silnikowi bazy danych. Może odczytywać właściwości bieżącej sesji, kontekstu użytkownika, aktywnej bazy danych, obiektów schematu albo instancji serwera. Dzięki temu zapytanie może pobrać dane o środowisku wykonania bez tworzenia dodatkowych tabel pomocniczych.

Wynik funkcji systemowej może być użyty w instrukcji SELECT, warunku WHERE, wyrażeniu CASE, definicji widoku, procedurze składowanej lub funkcji użytkownika. Zależnie od konkretnej funkcji SQL Server zwraca między innymi tekst, liczbę całkowitą, typ bit, identyfikator obiektu albo wartość daty i czasu. Nie wszystkie informacje o serwerze są jednak udostępniane przez funkcje. Część danych jest dostępna przez widoki katalogowe, widoki dynamicznego zarządzania oraz zmienne globalne.

Informacje o bieżącej sesji i kontekście wykonania

Do odczytywania kontekstu logowania i sesji służą między innymi funkcje SUSER_SNAME(), SYSTEM_USER, USER_NAME(), CURRENT_USER, SESSION_USER, HOST_NAME() oraz APP_NAME(). SUSER_SNAME() zwraca nazwę loginu powiązanego z bieżącym kontekstem bezpieczeństwa, a SYSTEM_USER jest równoważnym wyrażeniem zwracającym nazwę aktualnego loginu. USER_NAME(), CURRENT_USER i SESSION_USER odnoszą się do użytkownika bazy danych w aktualnej bazie.

HOST_NAME() zwraca nazwę hosta przekazaną przez klienta podczas nawiązywania połączenia, natomiast APP_NAME() zwraca nazwę aplikacji klienta przekazaną w parametrach połączenia. Wartości te pomagają ustalić, z jakiego środowiska wysłano zapytanie, ale nie powinny być traktowane jako niezależny dowód tożsamości urządzenia lub programu, ponieważ klient może przekazać własny tekst. Numer bieżącej sesji jest dostępny w zmiennej globalnej @@SPID, która nie jest funkcją, lecz specjalną zmienną systemową.

Funkcja CONNECTIONPROPERTY() pozwala pobierać właściwości połączenia dla bieżącej sesji. Przykładowo CONNECTIONPROPERTY('net_transport') może zwrócić używany transport sieciowy, a CONNECTIONPROPERTY('local_net_address') adres lokalny po stronie serwera, jeżeli dana informacja jest dostępna. Wynik zależy od rodzaju połączenia i konfiguracji instancji, dlatego warto uwzględniać możliwość otrzymania wartości NULL.

Funkcje metadanych bazy, obiektów i instancji

Funkcje metadanych zwracają informacje o strukturze bazy danych. DB_NAME() podaje nazwę bieżącej bazy, a DB_ID() jej identyfikator. Po przekazaniu identyfikatora lub nazwy bazy można odczytać dane dotyczące innego kontekstu, na przykład za pomocą DB_NAME(database_id). OBJECT_ID() zwraca identyfikator obiektu o podanej nazwie, opcjonalnie ograniczonego przez typ obiektu, taki jak tabela lub procedura. OBJECT_NAME() wykonuje operację odwrotną, zamieniając identyfikator obiektu na jego nazwę w określonej bazie.

Do dalszej analizy struktury można wykorzystać SCHEMA_ID(), SCHEMA_NAME(), TYPE_ID() i TYPE_NAME(). Funkcja COL_LENGTH() zwraca długość kolumny określonej tabeli lub widoku, a INDEX_COL() pozwala ustalić nazwę kolumny występującej na określonej pozycji indeksu. Funkcje te mogą wspierać kontrolę zależności i walidację schematu, lecz ich wynik może być pusty, gdy obiekt nie istnieje, nazwa jest nieprawidłowa albo bieżący użytkownik nie ma dostępu do odpowiednich metadanych.

Informacje o instancji można pobierać za pomocą funkcji SERVERPROPERTY(), na przykład SERVERPROPERTY('ProductVersion') zwraca wersję produktu, SERVERPROPERTY('ProductLevel') poziom aktualizacji, a SERVERPROPERTY('Edition') edycję SQL Server. Właściwości serwera mają różne typy i nie wszystkie są dostępne w każdej konfiguracji. DATABASEPROPERTYEX() zwraca wybrane właściwości konkretnej bazy, takie jak stan lub model odzyskiwania, przy użyciu nazwy bazy i nazwy właściwości.

Interpretacja wyników podczas analizy problemu

Funkcja systemowa nie naprawia automatycznie problemu i zwykle nie stanowi samodzielnego narzędzia diagnostycznego. Jej wartość należy odczytywać w kontekście zapytania, uprawnień, bazy, sesji oraz chwili wykonania. Na przykład DB_NAME() potwierdza kontekst bazy dla konkretnego połączenia, ale nie pokazuje wszystkich baz dostępnych na instancji. OBJECT_ID() może zwrócić NULL zarówno wtedy, gdy obiekt nie istnieje, jak i wtedy, gdy nazwa lub schemat zostały podane błędnie albo metadane są niewidoczne dla użytkownika.

Ważne jest rozróżnienie funkcji systemowych od innych mechanizmów SQL Server. @@VERSION i @@SPID są zmiennymi globalnymi, nie funkcjami. Widoki takie jak sys.databases i sys.objects są elementami katalogu systemowego. Widoki dynamicznego zarządzania, na przykład sys.dm_exec_sessions, dostarczają informacji o wielu sesjach i stanie pracy instancji, podczas gdy funkcje kontekstowe często opisują tylko bieżące połączenie. Prawidłowa diagnoza wymaga więc dobrania źródła informacji do pytania, które ma zostać rozstrzygnięte.

+48 22 100 48 29Zadzwoń teraz · serwisant w 1 godzinę