Właśnie czytam dokumentację do egzaminów SQL Server 2012 i zobaczyłem następujący punkt:
przypadek kontra isnull versus łączenie
Teraz wiem, JAK z nich korzystać, ale nie wiem KIEDY z nich korzystać. Proszę o wyjaśnienie. Dzięki.
Ps. Czy możemy mieć tag do pytań egzaminacyjnych?
sql-server
sql-server-2012
Stuart Blackler
źródło
źródło
COALESCE
jest rozwinięty do,CASE
ale oczywiście wCASE
oświadczeniu, które sam piszesz, możesz być bardziej elastyczny wWHEN
warunkach. DlaISNULL
kontraCOALESCE
pokrewnych / zduplikowanych?Odpowiedzi:
ISNULL - dostępny tylko w SQL Server. Pozwala na testowanie i zamianę wartości NULL na inną.
COALESCE - standard ANSI. Umożliwia testowanie i zamianę wartości NULL na pierwszą wartość inną niż null w zestawie argumentów o zmiennej długości. Ważne jest, aby pamiętać, że czynniki wpływające na to mają wpływ na typ danych
W powyższym przykładzie „a” jest pierwszą wartością inną niż null, ale dane znakowe mają niższy priorytet niż liczba całkowita.
Inną kwestią między ISNULL a COALESCE jest to, że wynik ISNULL jest określony jako NIE NULL, podczas gdy wynik wywołania COALESCE jest NULLable. Zobacz post JRJ ISNULL () <> COALESCE () Chociaż może się to wydawać trywialne, optymalizator zapytań może tworzyć różne plany na podstawie nullability kolumny.
Możesz łatwo przetestować zerowalność wyrażeń isnull / coalesce / case, uruchamiając je za pomocą dmo sys.dm_exec_describe_first_result_set
CASE - Również standardowa funkcja skalarna ANSI. Przyglądałbym się używaniu CASE z poprzednich dwóch, gdy mam test, którego nie można wyrazić prostym skalarem, ale to dość słaba odpowiedź, przyznaję.
źródło
COALESCE
. Jeszcze raz dziękujęCASE
jest technicznie wyrażeniem, a nie funkcją.ISNULL daje możliwość zwrotu 1 repalcement, COALESCE nie jest ograniczony do jednej wartości, np.
COALESCE(v1,v2,v3,v4,v5)
Jeśli V5 jest jedyną wartością, która NIE jest NULL, zostanie zwróconaźródło