asp.net 参数化了一条Sql语句。在profiler中监控到跟踪到下面的结果,运行之后出错exec sp_executesql N'select top @limit * from employee where Id not in( select top  @start Id from employee )',
N'@limit int,@start int',
@limit=10,@start=0消息 102,级别 15,状态 1,第 1 行
'@limit' 附近有语法错误。
消息 102,级别 15,状态 1,第 1 行
'@start' 附近有语法错误。
 sql = "select top @limit * from MaxNews where Id not in( select top @start Id from MaxNews )";
            SqlParameter[] parameters = { new SqlParameter("@limit", SqlDbType.Int, 0), new SqlParameter("@start", SqlDbType.Int, 0) };
            parameters[0].Value = limit;
            parameters[1].Value = start;

解决方案 »

  1.   

    top @limit
    这句有错误的
    top不能用参数
    在SQL2005里面可以了
    你可以利用rowcount
      

  2.   


    SQL SERVER不支持limit你可以使用top 或者 rownumber()来实现类似的功能
      

  3.   

    Top 方式 SELECT top 30 * from(          select *,ROW_NUMBER() over(order by contactid) as rowno          FROM [AdventureWorks].[Person].[Contact])tbl          where rowno>20          order by contactid; between方式 SELECT * from(          select *,ROW_NUMBER() over(order by contactid) as rowno          FROM [AdventureWorks].[Person].[Contact] )tb          where rowno>20 and rowno<50          order by contactid; Top+CTE WITH OrderedOrders AS (SELECT *, ROW_NUMBER() OVER (order by contactid)as RowNumber FROM [AdventureWorks].[Person].[Contact]) SELECT  top 30 * FROM OrderedOrders where RowNumber>20 order by rownumber; Between+CTE WITH OrderedOrders AS (SELECT *, ROW_NUMBER() OVER (order by contactid)as RowNumber FROM [AdventureWorks].[Person].[Contact]) SELECT  * FROM OrderedOrders where RowNumber>20 and RowNumber<50 order by RowNumber; 
      

  4.   


    exec sp_executesql N'select top @limit * from employee where Id not in( select top  
    @start Id from employee )',
    N'@limit int,@start int',
    @limit=10,@start=0
     修改为:
    --top  @limit  修改  top   (@limit)
    exec sp_executesql N'select top (@limit) * from employee where Id not in( select top  @start Id from employee )',
    N'@limit int,@start int',
    @limit=10,@start=0
      

  5.   

    如果有top 加参数的话
    就 必须 top  对参数 加 ()
    列:
    select top 10 * from LESP_ZFJC_XXTB
    =======================================================
    declare @int int
    set @int = 10 
    select top (@int) * from LESP_ZFJC_XXTB