Update various tables depending on survey answer
I would say this is a pretty reasonable solution.  You might consider adding an "active" flag or something similar so you can deactivate certain rows from your AffectedData table without deleting them.  Also you will need to make sure that any solution you have takes into account the possibility of multiple entries in the metadata table.  Either by putting a primary key on it that restricts them or by using a loop or batch solution when you are creating your dynamic SQL.