I think what you are missing is a viable workflow that accounts for errors, missing information, etc.
My approach would be,
- Grab all data and attempt to import it into a temporary table without no keys and three additional fields: 1) a flag that says 'processed|unprocessed|failed' that defaults to 'unprocessed' and 2) a unique account id 3) Long error message
- Run a utility (who cares what it is written in -- it can be a stored proc if you prefer) that scans the prospective record and fills in the blanks -- the account id. If no suitable account id can be produced flag the record as 'failed' and update the long error message field with the reason. If it passes move the record to its final destination.
- Finally, log every transaction with a timestamp when it was processed, how long it took to run, etc.
You'll also need a hardfile log to capture instances when the database is unavailable or if somebody changes permissions on the tables so as to make them unwriteable/unreadable/etc.
Celebrate Intellectual Diversity