我在sqlserver中测试sql语句没有问题,可以排序。。
但是在程序中就不管事儿了。
代码如下::string sql = "SELECT TOP (@pageSize) * FROM Web WHERE(WebId > ISNULL((SELECT MAX(WebId) FROM (SELECT TOP (@pageSize1*@pageIndex) WebId FROM Web ORDER BY WebId)AS T),0)) ORDER BY (select @orderType)";
            SqlCommand com = new SqlCommand(sql, conn);
            
            SqlParameter[] sp = new SqlParameter[]
            {
                new SqlParameter("@pageSize",SqlDbType.Int),
                new SqlParameter("@pageSize1",SqlDbType.Int),
                new SqlParameter("@pageIndex",SqlDbType.Int),
                new SqlParameter("@orderType",SqlDbType.VarChar)
            };
            sp[0].Value = pageSize;
            sp[1].Value = pageSize;
            sp[2].Value = pageIndex;
            sp[3].Value = orderType;注:参数orderType="WebId desc,WebTime desc";

解决方案 »

  1.   

    ORDER BY (select @orderType)????为什么要这么写...
      

  2.   

    调出 SQL server 的监视器瞅瞅
    看看前后有什么异常
      

  3.   

    如果不这么写会出现“由 ORDER BY 编号 1 标识的 SELECT 项包含一个变量,作为标识列位置的表达式的一部分。按照引用列名的表达式排序时,只允许使用变量。”这个错误....
      

  4.   

    不要相信 调试 还是看看你的语句在SQL Server中被解析成什么了吧!特别关注 ORDER BY @orderType
      

  5.   

    top n和列名不能作为参数  
    sql2008开始支持
    set @sql=@sql +' Order By '+@order
    exec(@sql)
    测试,打印SQL语句看看
      

  6.   


    这样写,会报“由 ORDER BY 编号 1 标识的 SELECT 项包含一个变量,作为标识列位置的表达式的一部分。按照引用列名的表达式排序时,只允许使用变量。”的错误。。
      

  7.   

    有没有更好的分页的SQL语句啊?
      

  8.   

    微软在 SQL2005 帮助中提到过相关信息用 ORDER BY 对行进行排序ORDER BY 只保证查询的最外面的 SELECT 语句的排序结果尽管视图定义包含 ORDER BY 子句,但是该 ORDER BY 子句仅用于确定 TOP 子句返回的行数。
    查询视图自身时,SQL Server 不保证将对结果进行排序
      

  9.   

    哥,我求你去查一下SQL 分页的SQL语句怎么写就知道你哪地方错了。
      

  10.   

    对象名不能做为参数
    你这需求只能用exec拼sql除了8楼全不靠谱
      

  11.   

    最后不要那个select 就好了。
      

  12.   

    给你看一个..可以试试:http://jiamaocode.com/Conts/1012/1012.html
      

  13.   

    sql会以关键字为间隔  所以后面 order by  和 select 在一起会有问题!