2016-11-21 7 views
0

Le SQL personnalisée Paging de requête pour ObjectDataSource, permet à chaque demande de fournir uniquement les données pertinentes à la page particulière, ce qui augmente la vitesse de chargement.requête SQL pour en option sur mesure Paging, C# ObjectDataSource

La question est comment rendre la radiomessagerie optionnelle?

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

L'objectif est de la fonction SQL pour être en mesure d'obtenir des données uniquement pour cette page particulière, ou il peut désactiver la pagination obtenir toutes les données pertinentes. Ci-dessus est ma tentative d'utiliser un CAS pour basculer si la requête est paginée en fonction de la valeur de la variable PagedData. Cependant, cette méthode se termine par une erreur.

S'il vous plaît laissez-moi savoir si vous avez besoin de moi pour tout clarifier, merci.

+0

ce qui signifie 'échec'? un message d'erreur? – McNets

+0

erreur: "Une seule expression peut être spécifiée dans la liste de sélection lorsque la sous-requête n'est pas introduite avec EXISTS." –

+0

et pouvez-vous obtenir la dernière phrase, peut-être un point d'arrêt, ou l'enregistrement dans un fichier texte, ou une boîte de message? – McNets

Répondre

1

SQL ne semble pas tout à fait exact, mais en supposant qu'il est correct, voici comment utiliser une instruction 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

Je vérifie et déclare la réponse si cela fonctionne, merci pour votre perspicacité \ –

+0

IMPRESSIONNANT! On m'a dit que si les instructions Else ne pouvaient pas être utilisées en SQL, oh la frustration .. :) –

+0

@Java 'IF ELSE' ne peut pas être utilisé dans les requêtes - ici nous l'utilisons dans le langage de traitement par lots qui n'est pas SQL . Techniquement, comme IF/ELSE, vous ne pouvez pas avoir de variables ou déclarer des instructions dans SQL. Notez également que l'utilisation des instructions IF peut être très lente, soyez donc prudent. – Hogan