Great, and, you cann add a message each time your trigger fixes
something, in order to know the "offending" programs and move the
control up to them.
Make it easier. Put a trigger on the file. In that trigger intercept the
buffer and strip out all special characters and store it consistently. A
check constraint is ok, but instead of taking a baseball bat to the
person's knees why not automate it and say I know what you meant and store
it that way? Then, just run a one time conversion over the file to store
them all the same way. Less training involved. You don't have to modify
existing code to check the error on a write or update for a check
constraint violation. There's a lot of crappy code out there that assumes
that any error on a write must be because the row exists and then you
should perform an update.