2010-10-26 17 views
1

J'ai une requête SQL qui retournera plus de 10 000 lignes. Étant donné que le client ne verra que 12 lignes à la fois, comment puis-je modifier mon SQL afin que je puisse sélectionner uniquement les lignes nécessaires?Comment sélectionner 12 lignes d'un ensemble de résultats donné à utiliser dans DataGrid/Paging? Nécessité de remplacer la mise en cache par défaut de la grille

Mon attente est que je requery la base de données chaque fois que l'utilisateur clique sur la grille. Ma solution est basée sur la démo ci-dessous, mais j'essaie de faire fonctionner cette fonction avec la table "OrderDetail" de northwind qui n'a pas de valeur d'ID propre/séquentielle.

http://demos.telerik.com/aspnet-ajax/grid/examples/client/virtualscrollpaging/defaultcs.aspx

J'utilise SQL Express dans mon environnement de dev local, mais utilisera SQL 2008 dans la production.

+0

Quelle version du serveur SQL? –

+0

@Dustin - Juste mis à jour; SQL 2008 – LamonteCristo

Répondre

2

Vous pouvez utiliser la fonction ROW_NUMBER():

WITH paging AS 
(
    SELECT 
     ROW_NUMBER() OVER (ORDER BY COLUMN) AS rowNum, 
     ... 
    FROM table 
) 
SELECT * 
FROM paging 
WHERE rowNum BETWEEN 1 AND 12 

Cela crée un CTE, mais pourrait utiliser une table temporaire ou variable de table ainsi. Vous pouvez ensuite ajouter des paramètres pour spécifier les entiers de la clause BETWEEN.

+0

Juste vérifier: rowNum commence à compter à "1" (et non 0)? – LamonteCristo

+0

Le 'rowNum' est un alias pour la colonne que la fonction' ROW_NUMBER() 'crée et oui il commence à 1. –

2
WITH [EMPLOYEE ORDERED BY ROWID] AS 
(SELECT ROW_NUMBER() OVER (ORDER BY EMPID ASC) AS ROWID, * FROM EMPLOYEE) 
SELECT FROM [EMPLOYEE ORDERED BY ROWID] WHERE ROWID <= 12 
+0

Quelqu'un pourrait-il expliquer celui-ci? J'essaie toujours de donner un sens à cela ... – LamonteCristo

+0

L'idée est de calculer le nombre d'éléments dans la source en utilisant la fonction SQl ROW_NUMBER(), puis d'effectuer une requête de sélection pour récupérer et afficher un certain nombre d'éléments sur votre actif page. Cela me semble logique. –