Kompatybilność z JSON określa, od której wersji SQL Server dostępne są funkcje przetwarzania danych w tym formacie.
Kompatybilność z JSON w SQL Server
Kompatybilność z JSON w SQL Server oznacza zgodność używanej wersji silnika oraz poziomu zgodności bazy danych z funkcjami służącymi do odczytu, modyfikacji i generowania dokumentów JSON. Obsługa JSON została wprowadzona w SQL Server 2016. W praktyce należy sprawdzić nie tylko numer wersji serwera, lecz także ustawienie compatibility_level konkretnej bazy danych, ponieważ część funkcji jest zależna od tego parametru.
W SQL Server dane JSON nie są przechowywane w odrębnym, natywnym typie danych JSON. Najczęściej znajdują się w kolumnach typu nvarchar, a poprawność dokumentu może być sprawdzana funkcją ISJSON. Oznacza to, że zgodność z JSON dotyczy przede wszystkim dostępnych funkcji języka Transact-SQL, sposobu interpretowania tekstu oraz możliwości wykorzystania indeksów, a nie wyboru specjalnego typu kolumny.
Poziom zgodności bazy a funkcja OPENJSON
Najważniejszym ustawieniem dla rozkładania dokumentu JSON na wiersze i kolumny jest poziom zgodności 130, odpowiadający funkcjom udostępnionym wraz z SQL Server 2016. Funkcja OPENJSON wymaga poziomu zgodności co najmniej 130. Jeżeli baza działa z niższym poziomem, zapytanie używające OPENJSON może zakończyć się błędem składni lub komunikatem wskazującym na niedostępność funkcji.
Aktualny poziom można sprawdzić w widoku sys.databases, na przykład zapytaniem SELECT name, compatibility_level FROM sys.databases;. Zmiana poziomu powinna być poprzedzona testami, ponieważ wpływa on również na zachowanie optymalizatora zapytań i sposób wykonywania innych instrukcji. Sama aktualizacja instancji SQL Server nie musi automatycznie zmienić poziomu zgodności istniejącej bazy.
Odczyt, walidacja i modyfikacja dokumentu
Do pobierania pojedynczych wartości z dokumentu służy JSON_VALUE, natomiast JSON_QUERY zwraca obiekt lub tablicę JSON. Funkcja JSON_MODIFY tworzy zmodyfikowaną wersję tekstu JSON, na przykład po zmianie wartości wskazanej ścieżką. Do generowania dokumentów z wyników zapytań stosuje się klauzulę FOR JSON, najczęściej w wariantach AUTO albo PATH. Przy pracy z tablicami i obiektami istotne jest rozróżnienie wartości skalarnej od fragmentu JSON, ponieważ nieprawidłowy dobór funkcji może spowodować potraktowanie obiektu jako zwykłego tekstu.
Ścieżki JSON mogą być używane w trybie lax lub strict. Tryb lax zwykle zwraca wartość pustą albo NULL, gdy wskazana właściwość nie istnieje lub ścieżka nie pasuje do dokumentu. Tryb strict sygnalizuje taki przypadek błędem, co jest przydatne przy walidowaniu wymaganego schematu danych. Przed przetwarzaniem warto użyć ISJSON, ale sama poprawność składni JSON nie potwierdza, że dokument zawiera wszystkie wymagane pola ani że mają one właściwe typy.
Diagnozowanie problemów ze zgodnością JSON
Przy błędzie związanym z JSON należy ustalić wersję instancji, poziom zgodności bazy, typ kolumny oraz dokładną funkcję wskazaną w zapytaniu. Warto także sprawdzić, czy dane nie zawierają uszkodzonych znaków, niepoprawnych cudzysłowów, niezamkniętych tablic lub obiektów oraz czy ścieżka odpowiada rzeczywistej strukturze dokumentu. W przypadku OPENJSON pierwszym krokiem jest potwierdzenie poziomu zgodności co najmniej 130.
Wydajność można poprawiać przez ograniczanie wielkości przetwarzanego dokumentu, jawne definiowanie schematu w klauzuli WITH oraz tworzenie indeksowanych kolumn obliczanych dla często wyszukiwanych wartości wyodrębnianych przez JSON_VALUE. Należy pamiętać, że tekst JSON pozostaje tekstem, dlatego porównania, sortowanie i konwersje typów powinny być wykonywane świadomie. Diagnostyka obejmuje również analizę planu wykonania i sprawdzenie, czy zastosowany indeks rzeczywiście jest używany przez konkretne zapytanie.