Problem z NULLem w MS SQL

0

Mam pewien problem. Próbuje "zaczytac" do swojej aplikacji przy uzyciu Table Adaptera wartosci z bazy.
Zapytanie Select wyglada nastepujaco:

SELECT WykonanieUslugi.IDWykonanieUslugi, WykonanieUslugi.IDRachunek, WykonanieUslugi.IDPromocja, WykonanieUslugi.CenaSprzedazy, Usluga.Nazwa, (CASE WHEN (WykonanieUslugi.IDPromocja NOT LIKE 'NULL') THEN 'True' ELSE 'False' END) AS [W promocji], Promocja.Uwaga
FROM WykonanieUslugi INNER JOIN
Usluga ON WykonanieUslugi.IDUsluga = Usluga.IDUsluga INNER JOIN
Promocja ON WykonanieUslugi.IDPromocja = Promocja.IDPromocja AND Usluga.IDUsluga = Promocja.IDUsluga
WHERE (WykonanieUslugi.IDRachunek = @Par_IDRachunek)

Wiem, ze w tabeli do IDRachunek = 7 przypisane jest 5 wierszy - 3 w promocji, 2 nie.
Ale zapytanie zwraca mi tylko wiersze dotyczace wykonanych usług w promocji (czyli 3 pozycje)

Zdaje sobie sprawe, ze szkopul tkwi w
CASE WHEN (WykonanieUslugi.IDPromocja NOT LIKE 'NULL') THEN 'True' ELSE 'False' END)
i w porownywaniu tego z NULLem

Próbowalem tez wersji
WykonanieUslugi.IDPromocja IS NOT NULL
WykonanieUslugi.IDPromocja > 0
LEN(WykonanieUslugi.IDPromocja) > 0

kazda zwraca tylko 3 wiersze :/

Jakies sugestie? Z ANSI_NULL za bardzo bawic sie nie moge w table adpaterze (chyba, ze moge, a nie wiem jak)
HILFE!

0

Mi się wydaje, że liczba wierszy zwróconych przez zapytanie zależy od JOIN i WHERE, a nie od SELECT.

1

może poczytaj jaka jest różnica pomiędzy inner join a np. left join

1
guushiddink napisał(a)

Zdaje sobie sprawe, ze szkopul tkwi w
CASE WHEN (WykonanieUslugi.IDPromocja NOT LIKE 'NULL') THEN 'True' ELSE 'False' END)
i w porownywaniu tego z NULLem

o matko, co to za potworek? tak się to robi:

CASE WHEN WykonanieUslugi.IDPromocja is not null THEN 'True' ELSE 'False' END)

drugą sprawą jest to, co napisał Misiek - w zwykłym join jeśli nie ma pasującego rekordu w joinowanej tabeli, to rekord nie znajdzie się w wyniku, więc Twój when w niczym nie pomoże. zamiast inner join dal left join.

0
Misiekd napisał(a)

może poczytaj jaka jest różnica pomiędzy inner join a np. left join

Ale fejspalm z mojej strony :D

zapomnialem o najprostszym rozwiazaniu! Dzieki

1 użytkowników online, w tym zalogowanych: 0, gości: 1