'select top '+cast(@ttt as varchar(20))+' 1')
top 後面 緊跟是整形的, 
字符行就出錯select top 20 1 是對 這是你下面折select top '20' 1 就不對了

解决方案 »

  1.   

    declare @ttt int
    set @ttt=20
    exec ('select top cast('+@ttt+' as varchar(20))'+' 1')
      

  2.   

    如果你改成這樣寫就對了,指第一條
    declare @ttt int
    declare  @s varchar(1000)
    set @ttt=20
    set  @s='select top '+cast(@ttt as varchar(20))+' 1'
    exec (@s)
      

  3.   

    但是:
    declare @ttt int
    set @ttt=20
    print('select top '+cast(@ttt as varchar(20))+' 1')
    得到的结果是select top 20 1,没有错啊
    为什么就是exec的时候出错呢
      

  4.   

    谢谢,Softlee81307(孔腎) 
    但是先对@s给值,再exec (@s)的方式,
    和直接exec的方式怎么会两样呢