“Ошибка при преобразовании типа данных varchar к числовому”. - Что столбец?

У меня есть огромное INSERT- оператор с 200 столбцами и suddendly я получаю страшное Error converting data type varchar to numeric. Есть ли где-нибудь, я вижу фактический столбец, который содержит значение "varchar"? Я знаю, что могу удалить один из столбцов за один раз, пока ошибка не исчезает, но это очень утомительно.

8
задан Espo 1 July 2010 в 09:47
поделиться

3 ответа

Вы не указываете версию SQL Server или количество строк.

Для SQL2005 + добавление предложения OUTPUT к INSERT может помочь идентифицировать несанкционированную строку, поскольку она будет выводить вставленные строки до тех пор, пока не обнаружит ошибку, поэтому следующая строка будет той, с которой возникла проблема

DECLARE @Source TABLE
(
Col1 VARCHAR(10),
Col2 VARCHAR(10)
)

INSERT INTO @Source 
SELECT '1','1' UNION ALL
SELECT '2','2' UNION ALL
SELECT '3','3' UNION ALL
SELECT '4A','4' UNION ALL
SELECT '5','5' 


DECLARE @Destination TABLE
(
Col1 INT,
Col2 VARCHAR(10)
)

INSERT INTO @Destination 
OUTPUT inserted.*
SELECT * 
FROM @Source

Возвращает

    (5 row(s) affected)
    Col1        Col2
    ----------- ----------
    1           1
    2           2
    3           3
    Msg 245, Level 16, State 1, Line 23
    Conversion failed when converting the varchar value '4A' to data type int.
5
ответ дан 5 December 2019 в 15:19
поделиться

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

Другой подход может заключаться в использовании функции ISNUMERIC () в T-SQL, чтобы попытаться найти виновника. Предполагая, что каждый столбец в вашей целевой таблице является числовым (отрегулируйте соответствующим образом, если это не так), вы можете попробовать следующее:

SELECT *
  FROM SourceTable
 WHERE ISNUMERIC(Column1) = 0
    OR ISNUMERIC(Column2) = 0
    OR ISNUMERIC(Column3) = 0
    OR ISNUMERIC(Column4) = 0
    ...

Это откроет строку, содержащую ваше нечисловое значение, и будет довольно ясно, в каком столбце оно находится. I знайте, что это утомительно, но, по крайней мере, это помогает вам выследить фактическое значение в дополнение к столбцу, который вызывает проблемы.

6
ответ дан 5 December 2019 в 15:19
поделиться

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

Если это не сработает, попробуйте это.

Ура!

0
ответ дан 5 December 2019 в 15:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: