I am proposing a new virtual table that would be analogous to the deleted and inserted tables that are commonly used in the OUTPUT clause. This table would be structurally identical to the source data. It could also include a column for the constraint name that was violated.
now it it is a table it would then be saved as part of an OUTPUT clause. perhaps something like :
OUTPUT ERRORS errors.* INTO ...
or
INSERT ...
OUTPUT inserted.* INTO ...
OUTPUT errors.* INTO...
SELECT...
The statement would still fail as it currently does but the offending row(s) would be salvaged for postmortem analysis. There could even be options that would change the statement's ACID properties to perhaps output the failed row but not fail the statement. that would mimic the behavior of the programmer cursoring over the source and saving those that can be but logging those that don't. It should be in the programmer's control with the default behavior to be as it is.
As one of the TSQL examples above shows, this change would also require the ability ot have multiple OUTPUT clauses. I would like that too (in addition to having an OUTPUT clause with a predicate - that too would be great. Then i could only get the stuff in the OUTPUTed table that i am interested in).