2016-11-21 76 views
0

SQL自定义分页查询为ObjectDataSource控件,允许每个请求只提供相关的特定页面数据,从而提高加载速度。SQL查询可选的自定义分页,C#的ObjectDataSource

问题是如何使页面可选?

string Query = @" 
    DECLARE @PagedData int 
    SET @PagedData = 1 

    SELECT  
     CASE 
      WHEN @PagedData = 1 
      THEN (SELECT * FROM (SELECT ROW_NUMBER() OVER(ORDER BY " + _sortColumns + @") AS ResultRank, * 

       FROM dbTable 

       WHERE (FeatureString LIKE '%gold%') 

       AS ProductsWithRowNumber WHERE ResultRank > 
       " + startIndex + " AND ResultRank <= (" + startIndex + " + " + pageSize + @")) 

      ELSE (SELECT * FROM dbTable WHERE (FeatureString LIKE '%gold%')) 
     END"; 

的目标是SQL函数可以只对特定页面获取数据,或者它可以关闭寻呼获取所有的相关数据。

以上是我尝试使用CASE切换查询是否基于变量PagedData的值进行分页。但是,此方法以错误结束。

如果您需要我澄清任何事情,请让我知道,谢谢。

+0

什么意思“失败”?任何错误信息? – McNets

+0

错误:“子查询未与EXISTS一起引入时,只能在选择列表中指定一个表达式。” –

+0

,你能得到最后一句,也许是一个断点,或保存在文本文件或消息框? – McNets

回答

1

您的SQL看起来不完全正确,但假设它是正确的,这里是如何使用if语句:

string Query = @" 
DECLARE @PagedData int 
SET @PagedData = 1 

IF @PagedData = 1 
(
    SELECT * FROM (SELECT ROW_NUMBER() OVER(ORDER BY " + _sortColumns + @") AS ResultRank, * 
    FROM dbTable 
    WHERE (FeatureString LIKE '%gold%') 
     AS ProductsWithRowNumber WHERE ResultRank > 
    " + startIndex + " AND ResultRank <= (" + startIndex + " + " + pageSize + @") 
) 
ELSE 
(
    SELECT * FROM dbTable WHERE (FeatureString LIKE '%gold%') 
)"; 

https://msdn.microsoft.com/en-us/library/ms182717.aspx

+0

我检查它,并宣布这个答案,如果它的工作,谢谢你的洞察力\ –

+0

真棒!我被告知如果Else语句不能在SQL中使用,那么沮丧.. :) –

+0

@Java'IF ELSE'不能在查询中使用 - 在这里我们使用批处理语言,它实际上不是SQL 。从技术上讲,像IF/ELSE,你不能在SQL中拥有变量或声明语句。还要注意,使用IF语句可能非常慢,所以要小心。 – Hogan