Как определить, в каком столбце возникает арифметическая ошибка переполнения при вставке?

Представьте себе таблицу с сотней различных столбцов в ней. Представьте себе, что у меня есть таблица пользовательских данных, из которой я хочу скопировать данные в базовую таблицу. Итак, я написал этот простой оператор вставки-выбора, и эта ошибка выскочила. Итак, каков самый элегантный способ выяснить, в каком столбце возникает ошибка?

Мои первоначальные мысли о решении заключались в том, чтобы заключить его в транзакцию, которую я в конечном итоге откат и использую своего рода подход «Разделяй и властвуй»:

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

И если он не работает, то столбец с ошибкой находится в другой половине. И мы продолжаем процесс, пока не найдем надоедливый столбец.

Что-нибудь более элегантное, чем это?

Примечание: я также нашел почти дубликат этого вопроса, но он почти не отвечает на него.

7
задан Denis Valeev 8 September 2010 в 11:20
поделиться