Представьте себе таблицу с сотней разных столбцов. Представьте себе, что у меня есть таблица пользовательских данных, из которой я хочу скопировать данные в базовую таблицу. Итак, я написал это простое предложение вставки-выбора, и эта ошибка появляется. Итак, какой самый элегантный способ выяснить, в каком столбце возникает ошибка?
Мои первоначальные мысли по поводу решения заключаются в том, чтобы обернуть его в транзакцию, которую я, в конечном счете, откатлю и использую своего рода подход «разделяй и властвуй»:
begin tran
insert into BaseTable (c1,c2,c3,...,cN)
select c1,c2,c3,...,cN
from UserTable
rollback tran
И это, очевидно, не удается. Таким образом, мы разделяем набор столбцов пополам так:
begin tran
insert into BaseTable (c1,c2,c3,...,cK) --where K = N/2
select c1,c2,c3,...,cK --where K = N/2
from UserTable
rollback tran
А если это не удается, то столбец с ошибками находится во второй половине. И мы продолжаем процесс, пока не найдем надоедливую колонку.
Что-нибудь более элегантное, чем это?
Примечание: я также нашел почти дубликат этого вопроса, но он едва отвечает на него.