select c.ColumnName,  cast(c.ColumnValue as money), b.TableID
  from CW_DATA_MONTH b, CW_DATA_COLUMN c, CW_COLUMN d
  where b.YearMonth = '201305' 
  and b.id = c.MonthID  
  and b.ConfirmStatus = 'Y'  
  and b.TableID = 13 and d.TableID = b.TableID 
  and d.ColumnName = c.ColumnName and d.IsMoney = 'Y' 
消息 235,级别 16,状态 0,第 1 行
无法将 char 值转换为 money。该 char 值的语法有误。
奇怪的地方有:
1、通过isnumeric函数,所有ColumnValue列值返回都是1,而且通过人工查看,也均是数字格式,没有其它符号;
2、这是13个公司的数据,如果再后面加上“and b.CompanyID = 1”之类的条件,是没有错误的,从1到13都没有错误;
3、“and b.CompanyID in ( 1,2,3,4,5,6,8,9,10,11,12,13)”,去掉id为7的公司数据,没有错误,单独写“and b.CompanyID = 7”也没有错误,“and b.CompanyID in ( 1,2,3,4,7)”,如果有id为7的公司,再加上其它任意4个以下的公司数据,也没有错误,个数超过4个就会出错。
在网上也查了很多,都没办法解决,请问各位有什么好的方法,谢谢!

解决方案 »

  1.   

    都是
    消息 235,级别 16,状态 0,第 1 行
     无法将 char 值转换为 money。该 char 值的语法有误
      

  2.   

    --毫无问题,那个值肯定不是全是1,还有其他不是数字的值
    if object_id('t') is not null
    drop table t
    go
    create table t
    (
    id char(20)
    )
    go
    insert into t
    select '1' union all
    select '1' union all
    select '1' union all
    select '1' union all
    select '1'
    go
    select  cast(id as money) mid from t
    /*
    mid
    1.00
    1.00
    1.00
    1.00
    1.00
    */