2016-11-21 5 views
0

Die SQL Benutzerdefinierte Paging Abfrage für Object, erlaubt jede Anfrage nur Daten für die betreffende Seite zu liefern, die Erhöhung Ladegeschwindigkeit.SQL Query für optionale kundenspezifische Paging, C# Object

Die Frage ist wie man Paging optional macht?

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"; 

Das Ziel ist, für die SQL-Funktion der Lage sein, Daten für diese bestimmte Seite nur zu bekommen, oder es kann Paging schalten Sie alle bekommen die relevanten Daten.

Oben ist mein Versuch, einen CASE zu verwenden, um zu wechseln, ob die Abfrage basierend auf dem Wert der Variablen PagedData ausgelagert wird. Diese Methode endet jedoch fehlerhaft.

Bitte lassen Sie mich wissen, wenn Sie mich brauchen, um etwas zu klären, danke.

+0

was bedeutet ‚versagt‘? irgendeine Fehlermeldung? – McNets

+0

Fehler: "Nur ein Ausdruck kann in der Auswahlliste angegeben werden, wenn die Unterabfrage nicht mit EXISTS eingeführt wird." –

+0

und können Sie den letzten Satz, vielleicht einen Haltepunkt, oder in einer Textdatei oder einem Meldungsfeld speichern? – McNets

Antwort

1

Ihre SQL sieht nicht genau richtig, aber vorausgesetzt, es ist richtig, hier ist, wie eine if-Anweisung zu verwenden:

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

Ich überprüfe es und erkläre dies die Antwort, wenn es funktioniert, danke für Ihre Einsicht \ –

+0

FANTASTISCH! Mir wurde gesagt, wenn Else-Anweisungen nicht in SQL verwendet werden könnten, oh die Frustration .. :) –

+0

@Java 'IF ELSE' kann nicht in Abfragen verwendet werden - hier verwenden wir es in der Stapelverarbeitungssprache, die eigentlich nicht SQL ist . Technisch wie IF/ELSE können Sie auch keine Variablen haben oder Anweisungen in SQL deklarieren. Beachten Sie auch, dass IF-Anweisungen sehr langsam sein können, also seien Sie vorsichtig. – Hogan