| Termin | Definicja |
|---|---|
| CLR typy danych | CLR typy danych to niestandardowe typy w SQL Server zaimplementowane za pomocą kodu środowiska .NET. Czym są typy CLR w SQL ServerCLR typy danych w Microsoft SQL Server to typy użytkownika implementowane w kodzie zarządzanym środowiska Common Language Runtime, czyli CLR platformy .NET. SQL Server może ładować odpowiednie zestawy .NET i korzystać z klas opisujących własną strukturę danych oraz operacje wykonywane na tych danych. Mechanizm ten rozszerza standardowy zestaw typów T-SQL, takich jak W SQL Server CLR jest wykorzystywany między innymi do tworzenia typów użytkownika oraz procedur, funkcji, wyzwalaczy i agregatów napisanych w języku obsługiwanym przez .NET. Dla typu CLR można zdefiniować sposób przechowywania wartości, konwersję do postaci tekstowej, porównywanie oraz operacje dostępne w zapytaniach. Taki typ może reprezentować dane, których struktura lub logika nie mieści się wygodnie w pojedynczej kolumnie prostego typu systemowego. Struktura i sposób przechowywania wartościTyp CLR w SQL Server może być typem strukturalnym albo referencyjnym. Typ strukturalny jest przechowywany jako wartość i opisuje dane zdefiniowane przez użytkownika, natomiast typ referencyjny może odwoływać się do obiektu. W praktyce typy użytkownika często modelują specjalistyczne wartości, na przykład identyfikator o określonym formacie, jednostkę miary, złożony numer albo inną wartość wymagającą własnych reguł walidacji i porównywania. Implementacja typu musi spełniać wymagania SQL Server dotyczące serializacji. Stosuje się serializację natywną, gdy struktura typu jest zgodna z ograniczeniami silnika, albo serializację zdefiniowaną przez użytkownika, gdy potrzebny jest własny sposób przekształcania obiektu do postaci binarnej. Rozmiar danych przechowywanych przez typ CLR ma znaczenie dla wydajności, indeksowania i wykorzystania miejsca w bazie. SQL Server udostępnia również właściwości oraz metody typu, które mogą być wywoływane w zapytaniach, o ile zostały prawidłowo zadeklarowane jako elementy publicznego interfejsu typu. Rejestracja zestawu i użycie w bazieAby użyć własnego kodu CLR, należy utworzyć zestaw .NET i zarejestrować go w konkretnej bazie danych jako assembly. Następnie na jego podstawie definiuje się typ użytkownika poleceniem Przykładowo kolumna tabeli może przechowywać wartość typu CLR zamiast kilku oddzielnych pól, jeżeli aplikacja operuje na niej jako na jednym logicznym obiekcie. Dostęp do elementów takiej wartości odbywa się przez właściwości i metody udostępnione przez typ. SQL Server wymaga jednak, aby implementacja zachowywała zgodność z regułami silnika dotyczącymi wartości pustych, konwersji, równości i sortowania. Jeżeli typ ma być używany w indeksach lub porównaniach, jego implementacja musi zapewniać deterministyczne i spójne wyniki odpowiednich operacji. Włączenie wykonywania kodu CLR w instancji SQL Server jest ustawieniem administracyjnym. Samo zarejestrowanie assembly w bazie nie oznacza automatycznie, że kod może wykonywać dowolne operacje systemowe. Poziom uprawnień zależy od konfiguracji oraz właściwości zestawu, a SQL Server rozróżnia między innymi kod bez dostępu do zasobów zewnętrznych i kod wymagający dostępu do systemu plików, sieci lub innych zasobów. Z tego powodu wdrożenie typu CLR wymaga kontroli źródła assembly, jego zależności, uprawnień oraz sposobu aktualizowania wersji. Diagnostyka, ograniczenia i zastosowania praktyczneCLR typy danych są przydatne wtedy, gdy potrzebna jest własna reprezentacja wartości i związana z nią logika, której trudno użyć w samym T-SQL. Mogą wspierać modelowanie danych przestrzennych lub innych struktur o wielu atrybutach, choć SQL Server ma także własne systemowe typy przestrzenne, takie jak Podczas diagnozowania problemów należy sprawdzić, czy assembly jest obecne w tej samej bazie, w której zdefiniowano typ, czy wszystkie zależności zostały zarejestrowane oraz czy sygnatura klasy odpowiada definicji SQL Server. Błędy mogą pojawić się również przy serializacji, konwersji tekstowej, porównywaniu wartości lub zmianie wersji zestawu. Warto analizować definicję typu, zależności assembly, plan zapytania oraz czas wykonywania metod CLR, ponieważ koszt obliczeń w kodzie .NET może stać się istotny przy operowaniu na dużej liczbie wierszy. Przy awarii komputera używanego do pracy z narzędziami administracyjnymi lub aplikacjami bazodanowymi diagnostyka może obejmować dysk, pamięć operacyjną, system operacyjny, sterowniki i konfigurację środowiska programistycznego. |