EXECUTE  sp_executesql N'select top  ' + @param0 + N'  * from Users',N'@param0 int',@param0=5;
这句有什么错误?
为什么提示 :
消息 102,级别 15,状态 1,第 1 行
'+' 附近有语法错误。

解决方案 »

  1.   

    EXECUTE  sp_executesql N'select top  ' + cast(@param0 as varchar) + N'  * from Users',N'@param0 int',@param0=5;
      

  2.   

    EXECUTE  sp_executesql N'select top  @param0 * from Users',N'@param0 int',@param0=5;
      

  3.   


    EXECUTE  sp_executesql N'select top  ' + rtrim(@param0) + N'  * from Users',N'@param0 int',@param0=5
      

  4.   

    删掉 declare @param0 ....那句,不用声明这个变量的,然后执行下面这句EXECUTE  sp_executesql N'select top  @param0 * from Users',N'@param0 int',@param0=5;或者保留 declare @param0 ....那句,然后exec('select top  ' + cast(@param0 as varchar(10)) + '  * from Users')
      

  5.   

    2005及以上,直接:
    select top (@param0) * from Users
    就行了.
    就算是2000,一定要执行动态exec,那:
    exec ('select top '+convert(nvarchar,@param0)+' * from Users')
    就行了,没必要用 sp_executesql
      

  6.   

    create table tb(id int,col varchar(10))
    insert into tb select 1,'AAA'
    insert into tb select 2,'BBB'
    insert into tb select 3,'CCC'
    insert into tb select 4,'DDD'
    insert into tb select 5,'EEE'
    insert into tb select 6,'FFF'
    insert into tb select 7,'GGG'
    GO
    declare @param0 int
    set @param0=5
    select top (@param0) * from tb
    --2000
    declare @sql nvarchar(1000)
    set @sql='select top '+convert(nvarchar(10),@param0)+' * from tb'
    exec(@sql)
    --2005用sp_executesql
    exec sp_executesql N'select top (@param0) * from tb',N'@param0 int',@param0
    --2000用sp_executesql 用不着直接向过程传送数据:
    set @sql='select top '+convert(nvarchar(10),@param0)+' * from tb'
    exec sp_executesql @sql
    go
    drop table tb
    /*
    id          col
    ----------- ----------
    1           AAA
    2           BBB
    3           CCC
    4           DDD
    5           EEE(5 行受影响)id          col
    ----------- ----------
    1           AAA
    2           BBB
    3           CCC
    4           DDD
    5           EEE(5 行受影响)id          col
    ----------- ----------
    1           AAA
    2           BBB
    3           CCC
    4           DDD
    5           EEE(5 行受影响)id          col
    ----------- ----------
    1           AAA
    2           BBB
    3           CCC
    4           DDD
    5           EEE(5 行受影响)*/
      

  7.   


    exec sp_executesql N'select top (@param0) * from tb',N'@param0 int',@param0
    --原来是要加括号,我试了半天没试出来,学习了。
      

  8.   

    sp_executesql (Transact-SQL)