日期:2014-05-17  浏览次数:20704 次

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,之前以varchar保存有记录

既然能改为decimal,说明没有非法数据,
应该是统计语句的问题,检查其中对该字段的处理过程.
------解决方案--------------------
既然你已经把这个字段的数据类型,修改为decimal,那么应该不可能出现你的这个问题。

你再检查一下这个字段的数据类型是否为decimal。
------解决方案--------------------
引用:
表里的数据如下图:


sl这个字段用语句查询时,显示结果:



意思是直接修改了sl的数据类型后,还存在VARCHAR类型?


哦 这个不表示,存在的varchar,因为你用where sl = '3.00'时,系统会自动把这个字符串'3.00'转化为3.00,所以也能把sl为3.00的记录给查询出来的。

这个不是问题哈,是对的。
------解决方案--------------------
创建一个新表,对应的列从varchar改成decimal,然后把数据插回去,插的过程中用convert来显式转换类型,插完之后删除原表,重命名新表