SQL2008 数据类型问题请教
一个表里面的a字段的数据类型本来是decimal的,可是插入了数据之后检查表时,发现数据类型不对,弄成了varchar,后来直接在表里把数据类型修改成decimal,这样操作后导致每次统计数据时老提示数据类型由varchar转换成numeric出错,请问是不是之前插入的数据保存成varchar,修改成decimal之后表里的记录还是以varchar存储,如果是这样的话,要怎么操作能把之前的数据全部修改成decimal类型
------解决方案--------------------有点乱.建议再确认一下该字段现在是什么类型的?
如果是decimal,那应该是统计语句的问题,检查其中对该字段的处理过程.
如果是varchar,检查该字段是否有非法数据,用isnumeric()函数判断.
------解决方案--------------------测了一下,虽然插入的时候进行隐式转换,但是貌似没影响
CREATE TABLE testA
(a DECIMAL(10,2))
INSERT INTO testA
VALUES('123.4')
SELECT * FROM testA
SELECT a+12.4
FROM testA
/*
(1 row(s) affected)
a
---------------------------------------
123.40
(1 row(s) affected)
---------------------------------------
135.80
*/
------解决方案--------------------但是最好在插入过程中就做好类型判断,免得插入失败
------解决方案--------------------那你最好全部数据处理一下,把类型转换成decimal,可以用isnumeric()函数找出数值型的数据,对于不是数值型的数据,就手动更新吧
------解决方案--------------------
既然能改为decimal,说明没有非法数据,
应该是统计语句的问题,检查其中对该字段的处理过程.
------解决方案--------------------既然你已经把这个字段的数据类型,修改为decimal,那么应该不可能出现你的这个问题。
你再检查一下这个字段的数据类型是否为decimal。
------解决方案--------------------
哦 这个不表示,存在的varchar,因为你用where sl = '3.00'时,系统会自动把这个字符串'3.00'转化为3.00,所以也能把sl为3.00的记录给查询出来的。
这个不是问题哈,是对的。
------解决方案--------------------创建一个新表,对应的列从varchar改成decimal,然后把数据插回去,插的过程中用convert来显式转换类型,插完之后删除原表,重命名新表