--调用  exec GetMaxPages 5.0,'',''  
alter procedure GetMaxPages  
@pagesize  float,            --每页显示条数  
@tablename varchar(20),    --表名  
@zlid varchar(20)
as   
begin      
  declare @sql varchar(200)   set @sql='select ceiling(count(*)/'+@pagesize+') from '+@tablename+' where (1=1)'
  print @sql
  exec (@Sql) end 此存贮过程执行时报错:
服务器: 消息 8114,级别 16,状态 5,过程 GetMaxPages,行 16
将数据类型 varchar 转换为 float 时出错。将此句改为
set @sql='select ceiling(count(*)/'+ltrim(@pagesize)+') from '+@tablename+' where (1=1)'
后可以通过print @sql看到@pagesize 此参数的小数点没了
请问大家怎么回事?

解决方案 »

  1.   

    alter procedure GetMaxPages  
    @pagesize  float,            --每页显示条数  
    @tablename varchar(20),    --表名  
    @zlid varchar(20) 
    as  
    begin      
      declare @sql varchar(200)   set @sql='select ceiling(count(*)/CAST('+LTRIM(@pagesize)+' AS FLOAT)) from '+@tablename+' where (1=1)' 
      print @sql 
      exec (@Sql) end 这样呢?
      

  2.   


    怎么会,ltrim怎么会把你的小数点给省略掉,
    declare @pagesize  float
    set @pagesize='0.3'
    select ltrim(@pagesize)
      

  3.   


    哦,你是小数后面带0啦。。
    --这样:
    alter procedure GetMaxPages  
    @pagesize  float,            --每页显示条数  
    @tablename varchar(20),    --表名  
    @zlid varchar(20) 
    as  
    begin      
      declare @sql varchar(200)   set @sql='select ceiling(count(*)/(1.0*'+ltrim(@pagesize)+')) from '+@tablename+' where (1=1)' 
      print @sql 
      exec (@Sql) end 
      

  4.   

    --TRY
    alter  procedure GetMaxPages  
    @pagesize  float,            --每页显示条数  
    @tablename varchar(20),    --表名  
    @zlid varchar(20) 
    as  
    begin      
      declare @sql varchar(200)   set @sql='select ceiling(count(*)/'+ltrim(cast (@pagesize as numeric(10,5)))+') from '+@tablename+' where (1=1)' 
      print @sql 
      exec (@Sql) 
    end 
    go
      

  5.   

    alter procedure GetMaxPages 
    @pagesize  int,            --每页显示条数 
    @tablename varchar(20),    --表名 
    @zlid varchar(20),
    @Page int output--總頁數
    as 
    begin     
      declare @sql nvarchar(4000)  set @sql='select @Page=ceiling(count(*)*1.0/'+@pagesize+') from '+@tablename+' where (1=1)'
    exec sp_executesql @sql,N'@Page int output',@Page outputend得到總頁數用一個變量輸出