Możesz użyć case
wyrażenia do tego. Myślę, że logika, której potrzebujesz, to:
UPDATE users
SET
username = Param1
email = case when email is not null then Param2 end,
password = case when password is not null then Param3 end
WHERE id = Param4;
Lub jeśli chcesz zaktualizować adres e-mail i hasło, jeśli oba nie są null
następnie:
UPDATE users
SET
username = Param1
email = case when email is not null and password is not null then Param2 end,
password = case when email is not null and password is not null then Param3 end
WHERE id = Param4;
Teraz pytanie zostało zaktualizowane i rozumiem, że chcesz przeprowadzić aktualizację wtedy i tylko wtedy, gdy zarówno adres e-mail, jak i hasło parametry nie są pustymi ciągami. Więc naprawdę chcesz filtrować . Wyraziłbym to jako:
UPDATE users
SET username = Param1, email = Param2, password = Param3
WHERE id = Param4 and Param2 <> '' and Param3 <> ''
Lub jeśli chcesz oddzielić logikę dla obu parametrów:
UPDATE users
SET
username = Param1,
email = case when Param2 <> '' then Param2 else email end,
password = case when Param3 <> '' then Param3 else password end
WHERE id = Param4;