CREATE PROCEDURE topsp1 @TopNum varchar(3)
AS
set nocount on
declare @SQLstr varchar(1000)
set @SQLstr = 'select  top '+@TopNum+' * from table1'
Begin Transaction
     exec(@sqlstr)
If @@error <> 0 
   Begin
   RollBack;
   Return  -1 ;
   End
  Commit;
  Return 1
GO

解决方案 »

  1.   

    动态SQL的问题
    exec('select  top '+@TopNum+' * from table1')即可
      

  2.   

    ...
    Begin Transaction
         exec('select top ' +  @TopNum + ' * from table1')
    ...
      

  3.   

    用动态sql语句做exec('select top'+@TopNum +'* from table')
      

  4.   

    谢谢qianfl(毛毛熊) , CrazyFor(蚂蚁) , newyu1127(825新生) , Niguna(幽灵) , happydreamer(小黑) 。我还找到另一个方法,一并写出来:
    把@TopNum定义为int,再用SET ROWCOUNT @TopNum
      

  5.   

    如果 @TopNum 的类型是 INT ,这样处理:'select  top ' + CONVERT(VARCHAR(20),@TopNum) + ' * from table1'