sql server 2008环境中,字段为decimal(18,2),当输入为空时,会报错。

遇到一个问题,数据库为sql server 2008环境中,字段为decimal(18,2),当输入为空时,会报错,错误信息为:从数据类型 varchar 转换为 numeric 时出错。如果输入不为空,则可以正常通过,请各位能人高手支支招。

首先 你要分清 null与输入为空的区别
null:表示未知值,没有值
你所说的输入为空值:其实已经有值了,值是一个空的字符串即‘’,‘’转化成数字类型当然会报错。

建议在程序的前端保存的时候做一个校验,如果输入的是‘’,则转化为null 或者0 来保存就好了。
建议楼主百度一下 null与‘’ 的区别追问

谢谢~~~
你的意思是在C#里加一个判断:
if(a=="")
{
a == null;
}

但这里有个问题,我尝试把把此时的a赋值给decimal,却同样会出现这个报警信息。null貌似不能给decimal赋值吧?

追答

你在最后转化成的sql 语句 是有问题的
比如: UPDATE TABLEA SET COLS1='NULL'
和 UPDATE TABLEA SET COLS1=NULL
你最后的生成的sql语句肯定是 前者, 多了引号,有了引号就表示是字符串了,表示有值
你还是没有理解在sql中 空值与null的区别,建议你搜搜相关的资料

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-05-20
不能使用‘’(空),只能用0或者null值代替。

sql server 2008环境中,字段为decimal(18,2),当输入为空时,会报错。
你所说的输入为空值:其实已经有值了,值是一个空的字符串即‘’,‘’转化成数字类型当然会报错。建议在程序的前端保存的时候做一个校验,如果输入的是‘’,则转化为null 或者0 来保存就好了。建议楼主百度一下 null与‘’ 的区别

sql serverz中有个字段类型是decimal(18, 2),当表中数据为0.00的时候...
出现.00是在后台还是在你的页面上这么显示的,如果是后台你可以在查询的sql把这个字段给转换成字符串就可以了,如果是前台,那就是w3c规则给转换了吧。试试看,这个可以向办法解决的。

SQLServer中decimal 类型的问题
我也试了一下,空字符串''转换成decimal类型时是会出错.所以在转换之前需要对原始数据进行判断,如果是空字符串就转为0或null.参考代码:declare @num decimal(8,2)declare @tmp varchar(10)set @tmp='234.567'if @tmp=''set @num=null --或者set @num=0 else set @num=@tmp insert into t...

在sqlserver中table表里的字段格式是decimal(19,2),例如存的数据是123...
正常显示就应该是123.00 你要是实在显示不出来可以这样 select cast(字段名 as numeric(19,2)) from 表名

sql语句 decimal(18,0)什么意思
1、sql语句 decimal(18,0)的意思是:可储存的最大十进位数总数为18,小数位数为0。2、Decimal(n,m)的含义如下:n表示可储存的最大十进位数总数,小数点左右两侧都包括在内,最小的有效位数是 1 ,最大的有效位数是 38 。m表示小数点右侧所能储存的最大十进位数。m和n之间要满足0≤m≤n的...

sql server中decimal(18,2)赋值给numeric(18,4)
DECLARE @a DECIMAL(18,2)DECLARE @b DECIMAL(18,4)SET @a = 1.23 SET @b = @a PRINT @a PRINT @b 输出 1.23 1.2300 赋值是没有问题的,检查一下你的数据

sql语句 decimal(18,0)什么意思
Decimal为SQL Server、MySql等数据库的一种数据类型,不属于浮点数类型,可以在定义时划定整数部分以及小数部分的位数。使用精确小数类型不仅能够保证数据计算更为精确,还可以节省储存空间,例如百分比使用decimal(4,2)即可。存储数据范围是:-10^38~10^38-1 的固定精度和小数位的数字。一个decimal类型的...

sql server 2008,想在某个表里新增一列,但是失败了。
因为在SQL SERVER中,记录Record是顺序存放在数据页中的,每一个数据页的可存储空间最大为8096字节(8K-页头的96字节,8192-96=8096),而SQL Server中行是不能跨数据页的。因此,如果你的建表语句中可变长度列的总长度超过了8096字节,就意味着SQL Server的数据页都装不下这条记录了,系统当然就会提示...

win8中sql2008r2安装中出现输入的字符不正确怎么回事
string SqlType = "select * from UserList where UserName = '" + UserName + "' and PassWord = '" + PassWord + "'";SqlDataReader ThRead = ThisB.GRead(SqlType);while (ThRead.Read()){ \/\/应该是这里出现错误了 return Convert.ToInt32(ThRead["ID"]);\/\/应该写成 \/\/ return ...

decimal(10,2)是什么意思
1.decimal在SQL Server里是精确值类型,精度38。在C#里代表了128位的数据类型decimal类型比double更精确,范围更小,适用于金融和货币计算。2.MySQL5.1引入了DECIMAL,该列的声明语法为DECIMAL(M,D)。NUMERIC与DECIMAL是一种同义的,并且如果字段类型被定义为NUMERIC,它将自动转换为DECIMAL。对声明语法...

相似回答