本帖最后由 0704 于 2011-08-08 00:33:55 编辑

解决方案 »

  1.   

    code的字段也是varchar,我试了加引号,强制类型转换都不行。到底问题出在哪里呢?例如调用存储过程输入execute 工资性收入 313111 和 execute 工资性收入 '313111',都不行。
      

  2.   

    @codes varchar(20)  不写等于 @codes varchar(1)
      

  3.   


    CREATE PROCEDURE 工资性收入
    @codes varchar(32)
    AS
      DECLARE @A real
      select @A=sum(isnull([money],0)) from [常住人口务工帐页] where code=@codes
      select @A
    GO
      

  4.   

    @codes varchar(n)n:长度
      

  5.   


       CREATE PROCEDURE 工资性收入
    @codes varchar(50)
    AS
      DECLARE @A real,@SQL nvarchar(max)
      SET @SQL='' 
      SET @SQL=@SQL+'select @A=sum([money]) from 常住人口务工帐页 where code='+CHAR(39)+@codes+CHAR(39)
      EXECUTE SP_EXECUTESQL @SQL
      select @A
    GO
      

  6.   

    参数的长度写好就没事了varchar(50)
      

  7.   

    谢谢各位,但是如果把参数的长度写上去,会提示服务器: 消息 409,级别 16,状态 2,过程 工资性收入,行 5
    sum or average aggregate 运算不能以 varchar 数据类型作为参数。CREATE PROCEDURE 工资性收入
    @codes varchar(32)
    AS
      DECLARE @A real
      select @A=sum(isnull([money],0)) from [常住人口务工帐页] where code=@codes
      select @A
    GO
      

  8.   

    SET @SQL=@SQL+'select @A=sum(cast([money] as dec(18,1)) from 常住人口务工帐页 where code='+CHAR(39)+@codes+CHAR(39)
      

  9.   


    CREATE PROCEDURE 工资性收入
    @codes varchar(32)
    AS
      DECLARE @A real
      select @A=sum(isnull(cast([money] as float),0)) from [常住人口务工帐页] where code=@codes and isnumeric(money)=1
      select @A
    GO
      

  10.   

    谢谢各位,是我的问题,money字段设置错了,设置成varchar。
    刚学SQL,我觉得我现在是经常纠结与SQL的语法,而不是算法,有时候一个很小的语法问题,一整就是一天,真是痛苦,有什么好的教材?推荐一下。谢谢各位前辈。
      

  11.   

    联机丛书就可以了,楼主写的SQL哪出错了,看提示,然后搜索关键字,看下用法和限制条件,对比你表的设计和SQL语句找找问题所在。