I think your approach with a simple concatenate couldn't work because with the Inv_ID you have no unique ID per record which is necessary to apply a where not exists-clause by appending data. This meant you will need some more load-steps to detect which ID is new, changed or old. Here an example which creates this for new and changed ID's whereby if I understand it right you will only need the corrected ID's:
load Inv_ID from Bill.qvd (qvd);
//load Inv_ID as ID_New from Bill_tmp.qvd (qvd) where not exists(Inv_ID);
load Inv_ID as ID_Corrected from Bill_tmp.qvd (qvd) where exists(Inv_ID);
drop tables ID_Exists;
rename field ID_Corrected tp Inv_ID;
load * from Bill.qvd (qvd) where not exists(Inv_ID);
load * from Bill_tmp.qvd (qvd);
I'm not absolutely sure that my suggestion worked directly without some adjustments but I think it showed how a load-chain could be created to separate the needed ID's into different categories and apply them afterwards as filter (dropping and renaming from tables and fields are essential for this kind of load-logic).
You could of course also extend the exists-function to a second parameter or applying some other type of filtering maybe with a condition per mapping but you would lose the optimized load of the qvd's (by smaller datasets it's not rellay important but by bigger one it's significant - even if you performed multiple temporary loads to get the ID's it should be faster then with unoptimized loadings).
A load alternatively quite similar (but ?? assumingly ?? slower than the optimized loads) to the exists-approach could it be to filter the table with inner join / inner keep loadings.
Beside this I would also consider to create an unique record-id from your source-data, maybe like:
subfield(filebasename(), '_', 2) & '|' & rowno() as UniqueKey
Since Inv_ID is associated with multiple rows, you cannot use it alone in your exists().
1. In your load of Bill, load Inv_ID twice, as "Inv_ID" and "Inv_ID_new".
2. Change your exists clause to exists(Inv_ID_new, Inv_ID)
3. Drop Field Inv_ID_new.
As Marcus mentioned you will lose the optimized load, but that's the cost.