Обычный способ сделать это - не дать пользователю вначале маршалировать неверные данные. Это то, что пользовательский интерфейс делает, действуя согласованно с базой данных. Например, если ожидается, что пользователь предоставит название города в Калифорнии, пользовательский интерфейс должен
- реализовать список выбора (он же комбинированный)
содержащий только названия городов
на калифорнийском или
- разрешить пользователю вводить что-либо, проверьте
посмотреть, является ли введенное значение
город в Калифорнии, и вернуть
информационное сообщение об ошибке, если оно не
- другие вещи, о которых я не могу думать сейчас, потому что я сонный
Другой нормальный способ - отправлять каждую «строку» или «набор» данных в виде отдельных транзакций. Неверные данные будут выполнять откат только для собственной транзакции, а не для всей партии. Это влияет на производительность; почти всегда быстрее вставлять 1000 строк как одну транзакцию из 1000 строк, а не как 1000 транзакций по одной строке.