2015-01-30 2 views
0

У меня есть таблица, в которой я хочу, чтобы обновить значение один столбец:Update ошибка типа же колонке

UPDATE t1 
SET [Value] = t2.[Value] 
FROM table1 AS t1 
INNER JOIN table2 AS t2 
ON (t1.ID = t2.ID) 

table1 (таблица) и table2 (вид) идентичны по структуре.

Когда я запускаю следующее обновление выше я получаю:

Msg 8115, Level 16, State 7, Line 1 
Arithmetic overflow error converting numeric to data type numeric. 
The statement has been terminated. 

Я проверил, если значения Колума различны, выполнив следующий запрос:

SELECT 
c.name 'Column Name', 
t.Name 'Data type', 
c.max_length 'Max Length', 
c.precision , 
c.scale , 
c.is_nullable, 
ISNULL(i.is_primary_key, 0) 'Primary Key' 
FROM  
sys.columns c 
INNER JOIN 
sys.types t ON c.user_type_id = t.user_type_id 
LEFT OUTER JOIN 
sys.index_columns ic ON ic.object_id = c.object_id AND ic.column_id = c.column_id 
LEFT OUTER JOIN 
sys.indexes i ON ic.object_id = i.object_id AND ic.index_id = i.index_id 
WHERE 
c.object_id = OBJECT_ID('table1') --and the same for table2 

Получения же типа данных, максимальную длину и т. д. с одинаковыми результатами.

Так почему я получаю эту ошибку?

Я проверил NUMERIC_ROUNDABORT Но не очень люблю об этом ... Любые другие решения?

+0

Есть ли триггеры на таблицах? Эта ошибка кажется, что вы выполняете математическую операцию на двух численных и переполняющих числовых. –

+0

Возможно, я ошибаюсь, но где ваша таблица1 и таблица2? ваш select с 'c.object_id = OBJECT_ID ('table1')' просто выбирает что-то с object_id равным table1, но он не показывает нам структуру таблицы1!? Я ошибаюсь? может быть, вы имеете в виду, что этот выбор из таблицы 'sys' показывает структуру на вашем экране, но мы не можем видеть, что – Alex

ответ

0

Добавляет функцию ROUND вокруг t2.Value с точностью до 10 изменений? Фактическая точность будет зависеть от определения столбца.

UPDATE t1 
SET [Value] = ROUND(t2.[Value], 10) 
FROM table1 AS t1 
INNER JOIN table2 AS t2 
ON (t1.ID = t2.ID 

Хотелось бы видеть инструкции CREATE TABLE.

0

Вы должны проверить точность числовых полей hte.

Каждое числовое поле обычно определяется с двумя параметрами, как в: numeric(5,2)

То, что это означает, что:

а) значение поля является числовым б) есть в общей сложности 5 чисел, которые могут быть в этом поле с) 2 из этих чисел зарезервированы для после десятичной

при обновлении числового поля, которое numeric(5,2) с полем, numeric(7,2), то это может привести к проблеме.

Смежные вопросы