Using an IIF is gonna degrade your performance on the query. If you're trying to find any and all strings you might want to choose something like the following:
SELECT Providers.iid, Providers.lname, ;
FROM rac!providers;
WHERE UPPER(Providers.lname) LIKE UPPER(?("%"+vp_lname+"%"))
This query will display all records that contain the string.
This way you keep with standards required by ANSI SQL if you ever decide to upsize.
A better way of doing this is to include the table and a parameterized view in a DBC and that works alot better, also.