2009-11-13 5 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는 순서를 결정하는 해당 집합의 선택이므로 의미가 없습니다. 따라서 허용되지 않습니다.

+0

네, 맞습니다! 감사 – IrfanRaza

1
는 블록과 외부로 ORDERBY 이동

선택 최종에 lline에게

order by a.StockNo desc 

이동합니다.

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

생성 PROCEDURE [DBO] sp_GetAllAssignmentData_Paged] @currentPage INT = 1, = INT @pageSize 20ASBEGIN NOCOUNT ON 설정한다.; (행 번호), a.StockNo, c.ClaimNo, v. [연도], v.Make, v.Model, c.DOAssign, c와 같이 AssignmentData As를 사용하여 ROW_NUMBER()를 선택합니다. 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, (@currentPage - 1) * @pageSize + 1)과 (@ currentPage * @ pageSize) 사이의 행을 a.StockNo desc에 의해 사이의 행으로 지정합니다. [Year], Make, Model, DOAssign, InsuranceComp, Location, [Status]
END