Представьте себе таблицу с сотней различных столбцов в ней. Представьте себе, что у меня есть таблица пользовательских данных, из которой я хочу скопировать данные в базовую таблицу. Итак, я написал этот простой оператор вставки-выбора, и эта ошибка выскочила. Итак, каков самый элегантный способ выяснить, в каком столбце возникает ошибка?
Мои первоначальные мысли о решении заключались в том, чтобы заключить его в транзакцию, которую я в конечном итоге откат и использую своего рода подход «Разделяй и властвуй»:
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
И если он не работает, то столбец с ошибкой находится в другой половине. И мы продолжаем процесс, пока не найдем надоедливый столбец.
Что-нибудь более элегантное, чем это?
Примечание: я также нашел почти дубликат этого вопроса, но он почти не отвечает на него.