改一下就可以了
Create Procedure GetSpecial
---@top_sp Int
As
         Declare @SQL varchar(200)
  Declare @top_sp varchar(200)
Set @top_sp = '49'
         set @sql='Select  top '
  set @sql=@sql+@top_sp+' * From Special'          exec @sql
GO

解决方案 »

  1.   

    Select  top '+@top_sp+' * From Special  改为
    exec('select top '+cast(@top_sp as varchar(10)) +' * from special')
      

  2.   

    改为:
    Create Procedure GetSpecial
    @top_sp Int
    As
    declare @sql varchar(8000)
    set @sql='Select  top '+cast(@top_sp as varchar)+' * From Special'
    exec(@sql)GO
      

  3.   

    Create Procedure GetSpecial
    @top_sp Int
    As
    declare @sql varchar(8000)
    set @sql='Select  top '+convert(varchar(50),@top_sp)+' * From Special'
    exec(@sql)
      

  4.   

    declare @sql nvarchar(1000)
    select @sql='select top '+convert(nvarchar(10),@top_sp) +' * from special'
    exec sp_executesql @sql
      

  5.   

    Create Procedure GetSpecial 
    ---@top_sp Int
    As
      Declare @top_sp int
    Set @top_sp = 49
      exec( 'Select  top '+ cast(@top_sp as varchar(10)) +' * From Special')  --就是这里说语法不对呀GO
      

  6.   

    declare @sql nvarchar(1000)
    declare @top_sp int
    set @top_sp=5
    select @sql='select top '+convert(nvarchar(10),@top_sp) +' * from special'
    exec sp_executesql @sql
    我试过了,没问题
      

  7.   

    Create Procedure GetSpecial
    @top_sp Int
    As
    declare @sql varchar(8000)
    set @sql='Select  top '+CONVERT(varchar, @top_sp)+' * From Special'
    exec(@sql)GO