只能用动态语句。建议改成declare @nvalue int
set @nvalue = 10set rowcount @nvalueselect ...set rowcount 0

解决方案 »

  1.   

    exec('select top  ' + cast(@nValue as varchar) +' * from [mytab]')
      

  2.   

    这个查询语句中带有两个top,
    如select top 20 * from [mytab] 
         where [id] not in (select top 10 * from [mytab])
    这样使用set来限定返回数恐怕不行,看来只有用生成字符串来执行了,不知用生成字符串执行是否会影响执行效率呢?
      

  3.   

    create procedure test @a int
    as
    exec('select top '+@a+'* from table')
      

  4.   

    create procedure test @a int
    as
    exec('select top '+@a+'* from table')@a 的类型要变一下
      

  5.   

    create procedure AAAA 
    @top INT
    AS
    DECLARE @SQL
    SET  @SQL ='select top  ' + cast(@top as varchar(10)) + ' * FROM TABLE'
    EXECUTE(@SQL)
      

  6.   

    类型转换
    convert(varchar,@top)
      

  7.   

    不需要阿.我试了 
    exec test 10 能得到结果
      

  8.   

    楼主哇!你看看你原来的你发的贴!我不是写了吗?????????你为什么要浪费你的分数呢????
    http://expert.csdn.net/Expert/TopicView2.asp?id=1522778&datebasetype=nowexec('SELECT  Top  '+cast(@每页大小  as  varchar)+'  *  FROM  T  WHERE  SortField  NOT  IN  (SELECT  TOP  '+cast(@每页大小*  @页号  as  varchar)+'  SortField  from  T  )')
      

  9.   

    我对于sql server对execute(字串)的执行效率不了解,一直没有用过,虽然这样很灵活,可是是否能达到所要求的效率呢?是不是每次运行都得对字串进行一次解读和确定查询计划呢?我觉得这仅仅是能执行而已,可能会影响到效率.
      

  10.   

    在存储过程中代入字符串exec和不是命令语句执行的效率相差无几.