Мой проект должен иметь дело с огромной базой данных. В худшем случае это может быть более 80 миллионов строк.Игнорировать строку ошибок при обновлении или вставке SQL Server
Теперь у меня есть 2 стола T1
и T2
. Я должен скопировать данные из таблицы T1
в таблице T2
- , если строка в таблице
T1
уже существует в таблицеT2
(такой же первичный ключ), а затем обновить данные других столбцов строки вT1
кT2
- еще вставить новую строку в
T2
в первый, я использую во время цикла перебрать 80 миллионов подряд в T1
затем обновить или вставить в T2
. Это очень очень медленно, для завершения требуется более 10 часов. Но, если какая-либо строка вызывает ошибку, я могу игнорировать ее, а также поймать ошибку.
После этого я использовать запрос:
update Table2
set T2.Column1 = T1.Column1,T2.Column2=T1.Column2
from Table2 T2 JOIN Table1 T1 ON T1.ID=T2.ID
Это намного быстрее, только занимает около 1-> 2 часов, чтобы закончить. Но, если какая-либо строка имеет ошибку, запрос не может выполняться вообще.
Итак, мой вопрос:
Есть ли способ, что выше запроса может игнорировать ряд ошибок и продолжить выполнение с действующей строкой?
Если я не могу это сделать, что я могу сделать, чтобы работать быстрее, чем первый метод, а также может ловить строку ошибок?
р/с: Я пытаюсь разбить таблицу на несколько небольших части затем обновить или вставить все малую часть в то же самое время, но он не быстрее всех.
Я решил проблему с моим вторым методом. Я использую TRY_CAST для предотвращения исключения при вставке или обновлении строки. Любые данные, которые недействительны, будут NULL. После окончания, я сравниваю 2 таблицы и нахожу разные строки. Эта строка является строкой ошибок.
спасибо. Запуск полученной ошибки: Msg 4104, уровень 16, состояние 1, строка 7 Идентификатор из нескольких частей «SOURCE.ID» не может быть связан. – user2500561
Можете ли вы проверить, работает ли ваше предложение выбора в «unsing». это может произойти, чем та же ошибка будет повторяться. Если это произойдет - вы должны искать проблему в своем SELECT –
Спасибо. Я решил проблему с моим вторым методом. Я использую TRY_CAST для предотвращения исключения при вставке или обновлении строки. Любые данные, которые недействительны, будут NULL. После окончания, я сравниваю 2 таблицы и нахожу разные строки. Эта строка является строкой ошибок. – user2500561