У нас есть требование вставить большое количество записей (от 2 до 3 миллионов) в таблицу. Тем не менее, мы должны иметь возможность проверять и отделять недопустимые записи - первичный ключ, внешний ключ и недействительные нарушения - в отдельную таблицу ошибок для последующей ссылки. В моем исследовании объемная вставка на SQL-сервере хорошо работает для вставки, но я не могу найти лучший способ отфильтровывать плохие записи данных. Имеет ли промежуточный стол между помощью? Хотя мы могли проверять наличие нарушений в некоторых очередях по сравнению с промежуточной таблицей, мы должны загружать хорошие записи в фактическую таблицу с помощью другой вставки - либо путем выбора вставки, либо слияния - но эффективен ли этот подход? Я обеспокоен тем, что было бы сродни выполнению двух вставок.Массовая вставка с валидацией данных
Я планирую использовать .net sqlbulkcopy для выполнения массовых вставок, и у него также нет четкой отчетности об ошибках.
Может ли кто-нибудь указать мне на более эффективное решение?
EDIT: Если этот подход является единственным решением, какой метод, по вашему мнению, лучше всего подходит для второй вставки? Вставляется ли ... select или MERGE? Согласуют ли они эффективность и скорость BULK INSERT? Или есть ли другая лучшая альтернатива?
Спасибо!
У этого есть несколько подходов: http: //stackoverflow.com/questions/1004525/sqlbulkcopy-error-handling-continue-on-error – TheGameiswar
@TheGameiswar Спасибо за ссылку. Я прошел через это, и, действительно, второй вариант - это то, что, по моему мнению, применимо в этом сценарии. Тем не менее, я не уверен, что это эффективно, поскольку мы будем делать 2x вставки - одну большую вставку из исходной в промежуточную таблицу, а затем другую из промежуточной таблицы в целевую. Я просто хотел узнать, есть ли еще возможности для оптимизации. –
@ TheGameiswar отредактировал вопрос о сборе мнения о лучшем методе, чтобы сделать второй шаг. Благодаря! –