exec sp_executesql N'SELECT DISTINCT TOP @nrows name FROM test WHERE name like @term', N'@nrows int,@term nvarchar(2)', @nrows=10,@term = N'n%'第 1 行: '@nrows' 附近有语法错误。应该怎么改啊

解决方案 »

  1.   

    @term是型参数来的,能赋值嘛?
    例如
    where 字段名=@term  
      

  2.   

    DECLARE @nrows INT,@term nvarchar(2)
    SET @nrows = 10
    SET @term = 'B%'
    EXEC('SELECT DISTINCT TOP '+@nrows+' name FROM test WHERE name like '''+@term+'''')
      

  3.   

    exec sp_executesql N'SELECT DISTINCT TOP 10 name FROM test WHERE name like @term', N'@term nvarchar(2)', @term = N'n%'
    这条语句就ok了
      

  4.   

    str(@nrows )    top后面只能跟常数!  
      

  5.   

    DECLARE @nrows INT,@term nvarchar(2) 
    SET @nrows = 10 
    SET @term = 'B%' 
    EXEC('SELECT DISTINCT TOP '+@nrows+' name FROM test WHERE name like '''+@term+'''')你是在回避问题哦
    这个我也知道出错了就想知道错在哪里
      

  6.   

     top后面只能跟常数也许是你说的那样
      

  7.   

    嗯,是在回避问题...
    使用 sp_executesql 时SQL Server会对语句进行编译,对于你给出的语句,在编译时就已经报错.
    因为编译时 @nrows 还没有被替换成数字10,这里他是一个字符串