2009-11-13 85 views
1

我正在嘗試創建一個用於在aspx頁面上呈現分頁數據的SP。我已經寫了下面的代碼 -存儲過程中的錯誤

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 

當我嘗試創建此SP下產生的錯誤信息 - ORDER BY子句在視圖,內聯函數,派生表,子查詢無效,公用表表達式,除非TOP或FOR XML也被指定。

有人能糾正我的錯誤嗎?

感謝您分享寶貴的時間。

回答

6

內部集AssignmentData的排序是毫無意義的,因爲它是從該集合中選擇的將決定排序的選項。因此,這是不允許的。移動lline

order by a.StockNo desc 

到您的最終選擇

+0

是的你是對的!謝謝 – IrfanRaza 2009-11-13 15:39:25

1

移動排序依據外with塊。

1

你的CTE在最後有一個無效的命令 - 把它拿出來,一切都會好的。

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。使用AssignmentData As(選擇ROW_NUMBER()over(按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其中(a.AssignmentID = c.AssignmentID)和(v.AssignmentID = c.AssignmentID))SELECT StockNo,ClaimNo, [Year],Make,Model,DOAssign,InsuranceComp,Location,[Status] FROM AssignmentData WHERE((@currentPage - 1)* @pageSize + 1)和(@ currentPage * @ pageSize)之間的行 by a.StockNo desc
END