比如一个存储过程:
create proc sp_ShowInfoList
@TopNum int   --显示最新的多少条记录
as
select top @TopNum * from info order by id desc
GO 上面代码中,SQL server 说@TopNum 处有错误,现在的问题是能不能用参数控制显示最新多少条(@TopNum),不知在存储过程中能不实现,如果能,又如何实现呢?

解决方案 »

  1.   


    declare @@int int
    set @@int=5
    declare @@cSQL varchar(1000)
    set @@cSQL='select top '+convert(varchar,@@int)+' * from tFunction'
    --print(@@cSQL)
    execute(@@cSQL)
      

  2.   

    create proc sp_ShowInfoList
    @TopNum int   --显示最新的多少条记录
    as
    select top @TopNum * from info order by id desc
    GOdeclare @cSQL varchar(1000)
    set @cSQL='select top '+convert(varchar,@TopNum)+' * from tFunction'
    execute(@cSQL)
    没必要定义@@
      

  3.   

    搞错了
    create proc sp_ShowInfoList
    @TopNum int   --显示最新的多少条记录
    asdeclare @cSQL varchar(1000)
    set @cSQL='select top '+convert(varchar,@TopNum)+' * from tFunction'
    exec(@cSQL)
    go
      

  4.   

    现在我加了个参数进来,新的问题又出来了:(加了个:classid)
    create proc sp_ShowInfoList
    @classid int  --分类号
    @TopNum int   --显示最新的多少条记录
    asdeclare @cSQL varchar(1000)
    set @cSQL='select top '+convert(varchar,@TopNum)+' * from tFunction 
    where classid=@classid'
    exec(@cSQL)
    go编译时系统提示:
    必须声明变量 '@classid'经检查,程序代码均正常,问题出在存储过程里面,不知道是怎么回事!!!
      

  5.   

    现在我加了个参数进来,新的问题又出来了:(加了个:classid)  
    create  proc  sp_ShowInfoList  
    @classid  int,    --分类号  
    @TopNum  int      --显示最新的多少条记录  
    as  
     
    declare  @cSQL  varchar(1000)  
    set  @cSQL='select  top  '+convert(varchar,@TopNum)+'  *  from  tFunction    
    where  classid=@classid'  
    exec(@cSQL)  
    go  
     
    编译时系统提示:  
    必须声明变量  '@classid'  
     
    经检查,程序代码均正常,问题出在存储过程里面,不知道是怎么回事!!!  
      

  6.   

    create  proc  sp_ShowInfoList  
    @classid  int,    --分类号  
    @TopNum  int      --显示最新的多少条记录  
    as  
     
    declare  @cSQL  varchar(1000)  
    set  @cSQL='select  top  '+convert(varchar,@TopNum)+'  *  from  tFunction    
    where  classid=@classid'  
    exec(@cSQL)  
    go  检查你的sql没问题啊我写的时候一般是这么写的:
    declare  @cSQL  varchar(1000)  
    top  '+convert(varchar,@TopNum)+'  *  from  tFunction    
    set @cSQL=1
     
    这样写行不? wy121420979() ( ) 信誉:100  2006-07-30 22:40:00  得分: 0  
     
     
       怎么没人跟了,跟了就给分!!!
      
     
    你可是这么说的,不马上给分就不是人
      

  7.   

    @TopNum  int      --显示最新的多少条记录select前set rowcount @TopNum 就可以了
      

  8.   

    现在我加了个参数进来,新的问题又出来了:(加了个:classid)  
    create  proc  sp_ShowInfoList  
    @classid  int,    --分类号  
    @TopNum  int      --显示最新的多少条记录  
    as  
     
    declare  @cSQL  varchar(1000)  
    set  @cSQL='select  top  '+convert(varchar,@TopNum)+'  *  from  tFunction    
    where  classid=@classid'  
    exec(@cSQL)  
    go  
     
    编译时系统提示:  
    必须声明变量  '@classid'  
    ----------------------------------------------------------
    你就不会变通一下跟前面那个@topnum那样写了吗,真是急死人,这样改啊
    set  @cSQL='select  top  '+convert(varchar,@TopNum)+'  *  from  tFunction    
    where  classid='+convert(varchar,@classid)  
      

  9.   

    必须把@classid隔离:
    set @cSQL='select top '+convert(varchar(10),@TopNum)+' * from tFunction where classid=' + Convert(VarChar(10),@classid)