2009-11-13 7 views
1

J'essaye de créer un SP pour présenter des données paginées sur la page aspx. J'ai écrit le code suivant -Erreur dans la procédure stockée

Create PROCEDURE [dbo].[sp_GetAllAssignmentData_Paged] 

    @currentPage INT=1, 
    @pageSize INT=20 

AS 

BEGIN 

    SET NOCOUNT ON; 
    with AssignmentData As(
     select ROW_NUMBER() over (order by a.StockNo desc) AS [Row], 
      a.StockNo,c.ClaimNo,v.[Year],v.Make,v.Model, 
      c.DOAssign,c.InsuranceComp,c.Location,c.Status 
     from 
      dbo.Assignments a, 
      dbo.Assignment_ClaimInfo c, 
      dbo.Assignment_VehicleInfo v 
     where 
      (a.AssignmentID=c.AssignmentID) and 
      (v.AssignmentID=c.AssignmentID) 
      order by a.StockNo desc 
    ) 
    SELECT StockNo, ClaimNo, [Year], Make, Model, DOAssign, InsuranceComp, Location, [Status] 
    FROM AssignmentData 
    WHERE Row between ((@currentPage - 1) * @pageSize + 1) and (@currentPage*@pageSize) END 

Lorsque je tente de créer ce SP message d'erreur est généré - La clause ORDER BY est invalide dans les vues, fonctions en ligne, les tables dérivées, les sous-requêtes, et une table commune expressions, sauf si TOP ou FOR XML est également spécifié.

Quelqu'un pourrait-il corriger mon erreur?

Merci de partager votre précieux temps.

Répondre

6

La commande de votre ensemble interne, AssignmentData, est inutile, car c'est la sélection de cet ensemble qui déterminera la commande. Par conséquent, ce n'est pas autorisé. Déplacez le lline

order by a.StockNo desc 

à votre finale sélectionnez

+0

Oui, vous avez raison !!! Merci – IrfanRaza

1

Déplacer le orderby à l'extérieur du bloc AVEC.

1

Votre CTE a une commande qui n'est plus valide à la fin - retirez-la et tout ira bien.

select ROW_NUMBER() over (order by a.StockNo desc) AS [Row], 
      a.StockNo,c.ClaimNo,v.[Year],v.Make,v.Model, 
      c.DOAssign,c.InsuranceComp,c.Location,c.Status 
    from 
      dbo.Assignments a, 
      dbo.Assignment_ClaimInfo c, 
      dbo.Assignment_VehicleInfo v 
    where 
      (a.AssignmentID=c.AssignmentID) and 
      (v.AssignmentID=c.AssignmentID) 
      order by a.StockNo desc -- This is the problem. 
0

CREATE PROCEDURE [dbo] [sp_GetAllAssignmentData_Paged] @currentPage INT = 1, @pageSize INT = 20ASBEGIN SET NOCOUNT ON. avec AssignmentData As (sélectionnez ROW_NUMBER() sur (commande par a.StockNo desc) AS [Row], a.StockNo, c.ClaimNo, v. [Année], v.Make, v.Model, c.DOAssign, c. InsuranceComp, c.Location, c.Status de dbo.Assignments a, dbo.Assignment_ClaimInfo c, dbo.Assignment_VehicleInfo v où (a.AssignmentID = c.AssignmentID) et (v.AssignmentID = c.AssignmentID)) SELECT StockNo, ClaimNo, [Année], Marque, Modèle, DOAssign, InsuranceComp, Emplacement, [Statut] FROM AssignmentData WHERE Ligne entre ((@currentPage - 1) * @pageSize + 1) et (@ currentPage * @ pageSize) par a.StockNo desc
FIN