select top @page * from table1

解决方案 »

  1.   

    刚刚的有问题,下面的通过测试;alter   proc proc1  
    @page int 
    as  
    declare  @sql  varchar(8000)   
    set @sql='Select top '+cast(@page as varchar)+'  *   From   table1'   
    exec(@sql)       
    GO   
      
      

  2.   

    少了括号:create proc proc1 
    ( @page int ) set @page = 10 
    select top @page from table1 
      

  3.   

    select top @page from table1 
    ====================
    1、直接将变量写进执行的sql语句是不对的
    2、缺少查找对象
       == @sql = 'select top '+@page+' * from table1'
       == exec(@sql)
      

  4.   

    sqllong 的代码alter   proc proc1  
    @page int 
    as  
    declare  @sql  varchar(8000)   
    set @sql='Select top '+cast(@page as varchar)+'  *   From   table1'   
    exec(@sql)       
    GO   
    在分析查询时是正确的
    而我的代码
    create proc proc1 
    @page int 
    as  
    set @page = 10 
    select top @page from table1
    在分析查询时却提示@page语法错误
    top后是不是只能跟整型数,如果那样的话那'Select top '+cast(@page as varchar)+'中不是把@page变成了字符型了吗,
    那怎么运行有成功了呢?
    sq_zhuyi 说
    select top @page from table1  
    ==================== 
    1、直接将变量写进执行的sql语句是不对的
    ---------------------------------
    1中的变量是不是指@page,而@page放进sql中是不对的
    那我将写成select @page from table1没错啊(分析查询通过)
      

  5.   

    sq_zhuyi  说的对啊.1、直接将变量写进执行的sql语句是不对的 
     @page是你定义的变量,所以直接写到sql中不对.
    2,你的sql语句本来也有语法错误.
      select top @page from table1  -- @page后面直接就from,少了要选取的字段名.所以
      @sql =  'select top  '+@page+ ' * from table1 '  --@page有个*,(注意到没有?)
        exec(@sql)是正确的
      

  6.   

     'Select top  '+cast(@page as varchar)+ '中不是把@page变成了字符型了吗
    -----------------------------------------------------------------------------------------
    是的,进行字符串的拼接,当然set @sql= 'Select top  ' + @page + '  *   From   table1 ' 来拼接一样可以;1中的变量是不是指@page,而@page放进sql中是不对的
    那我将写成select @page from table1没错啊(分析查询通过)
    -------------------------------------------------------------------------
    例如,SQL写为:select 10 from table 肯定是没有语法错误的
      

  7.   

    sqllong 我理解那是拼接的意思,可能是我表达不对,我其实是想问一下假设我不拼接的话
    那么假设是
    alter   proc proc1  
    @page int 
    as  
    Select top cast(@page as varchar)  *   From   table1
    在分析查询时,它就提示cast附近有错误.
    用你的方法
    alter   proc proc1  
    @page int 
    as  
    declare  @sql  varchar(8000)   
    set @sql='Select top '+cast(@as varchar)+'  *   From   table1'   
    exec(@sql)       
    GO   
    就正确了(分析查询)
    那我就奇怪了,如果说"直接将变量写进执行的sql语句是不对的"是我错的原因,那你的怎么就没有那个错了
    ,我感觉它们的意思都差不多啊
      

  8.   

    可能是我一开始就没把问题说清楚吧,不过我用sqllong的方法已经把代码调好了,谢你们了