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

Opcje zgodności ANSI

Termin Definicja
Opcje zgodności ANSI

Opcje zgodności ANSI to ustawienia sesji, np. ANSI_NULLS, wpływające na sposób porównywania wartości i obsługę błędów.

Rola ustawień ANSI w sesji SQL

Opcje zgodności ANSI to zestaw ustawień sesji języka SQL, które określają, jak silnik interpretuje wybrane konstrukcje zapytań. Nie są one osobnym typem danych ani formatem pliku. Działają w kontekście połączenia z bazą danych i mogą wpływać między innymi na porównywanie wartości NULL, sposób wykonywania operacji arytmetycznych, kontrolę przepełnienia oraz reakcję na błędy podczas zapisu danych. Ta sama instrukcja może więc zachować się inaczej w dwóch sesjach, jeżeli połączenia zostały utworzone z odmiennymi ustawieniami.

Określenie ANSI odnosi się do zgodności z regułami kojarzonymi ze standardem SQL opracowywanym przez organizacje normalizacyjne. W praktyce konkretna lista opcji, ich nazwy oraz wartości domyślne zależą od używanego silnika. Z tego powodu przed zmianą ustawień trzeba sprawdzić dokumentację danego systemu oraz sposób, w jaki sterownik lub aplikacja inicjuje nowe połączenie. Ustawienia sesji nie muszą być trwałą właściwością całej bazy.

ANSI_NULLS i porównywanie wartości NULL

Najczęściej przywoływaną opcją jest ANSI_NULLS. W klasycznej logice SQL wartość NULL oznacza brak znanej wartości, a nie zwykły tekst ani liczbę. Porównanie kolumny z NULL za pomocą operatora równości, na przykład kolumna = NULL, nie służy do wyszukiwania pustych wartości. Wynikiem takiego porównania jest wartość UNKNOWN, ponieważ silnik nie może stwierdzić, czy nieznana wartość jest równa NULL. Do sprawdzania braku wartości stosuje się predykat IS NULL, a do sprawdzania jej obecności IS NOT NULL.

W SQL Server ustawienie ANSI_NULLS określało historycznie sposób interpretacji porównań z NULL przy użyciu operatorów = i <>. Przy włączonej zgodności ANSI porównania takie nie zwracają logicznej wartości TRUE, dlatego poprawne zapytanie powinno używać IS NULL albo IS NOT NULL. Współczesne wersje SQL Server traktują ANSI_NULLS jako ustawienie wymagane dla wielu obiektów i scenariuszy, a jego znaczenie nie powinno być utożsamiane z możliwością zastąpienia predykatu IS NULL operatorem równości. Kod zależny od historycznego zachowania może działać inaczej po zmianie wersji silnika lub sterownika.

Wpływ opcji na błędy i zapisywanie danych

Inne ustawienia zgodności ANSI mogą decydować o tym, czy silnik przerwie instrukcję po wykryciu błędu, czy jedynie zwróci ostrzeżenie albo specjalny wynik. Przykładowo operacja arytmetyczna wykonywana na danych może doprowadzić do dzielenia przez zero, przepełnienia typu liczbowego lub utraty części wartości przy konwersji. Zachowanie zależy od reguł konkretnego silnika i zestawu aktywnych opcji. Dlatego sama treść komunikatu o błędzie nie zawsze wystarcza do odtworzenia problemu; trzeba również znać ustawienia sesji, typy danych oraz kolejność wykonywanych instrukcji.

Opcje ANSI mają znaczenie także przy instrukcjach INSERT, UPDATE i DELETE. Jeżeli ustawienie powoduje zatrzymanie instrukcji po błędzie, część operacji może nie zostać wykonana. W połączeniu z transakcją trzeba wtedy ustalić, czy transakcja pozostała aktywna, czy została wycofana, oraz czy aplikacja poprawnie obsłużyła błąd. Szczególnej uwagi wymagają procedury składowane, wyzwalacze i zapytania uruchamiane przez sterowniki, ponieważ ustawienia sesji mogą być przekazywane automatycznie przy otwieraniu połączenia.

Rozpoznawanie niezgodności ustawień w praktyce

Analizę problemu należy rozpocząć od ustalenia silnika bazy danych, wersji sterownika i rzeczywistych wartości opcji aktywnych w połączeniu, w którym występuje błąd. Następnie warto porównać zachowanie tego samego zapytania w sesji aplikacji oraz w narzędziu administracyjnym. Różnica między tymi środowiskami może wynikać z ustawień inicjalizowanych przez sterownik, biblioteki dostępu do danych albo kod otwierający połączenie. Sam fakt, że zapytanie działa ręcznie, nie dowodzi więc poprawności jego wykonania z poziomu programu.

Podczas diagnostyki trzeba sprawdzić użycie operatorów = i <> przy kolumnach dopuszczających NULL, jawne testy IS NULL, obsługę transakcji oraz reakcję aplikacji na błędy. Nie należy zmieniać wszystkich opcji jednocześnie, ponieważ utrudnia to ustalenie przyczyny. Bezpieczniejsza jest identyfikacja jednej różnicy, przygotowanie małego zapytania testowego i dopiero potem korekta kodu albo konfiguracji połączenia. W środowisku produkcyjnym zmiana ustawień powinna być poprzedzona sprawdzeniem procedur, widoków, wyzwalaczy i zapytań generowanych przez aplikację.

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