Ошибка в хранимой процедуре - PullRequest
1 голос
/ 13 ноября 2009

Я пытаюсь создать SP для представления выгружаемых данных на странице aspx. Я написал следующий код -

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.

Может ли кто-нибудь исправить мою ошибку?

Спасибо, что поделились своим драгоценным временем.

Ответы [ 4 ]

6 голосов
/ 13 ноября 2009

Упорядочение вашего внутреннего набора, AssignmentData, не имеет смысла, поскольку именно выбор из этого набора будет определять порядок. Поэтому это не разрешено. Переместить линию

order by a.StockNo desc

до вашего окончательного выбора

1 голос
/ 13 ноября 2009

В конце вашего 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.
1 голос
/ 13 ноября 2009

Переместить ордер на вне блока WITH.

0 голосов
/ 14 ноября 2009

Создать PROCEDURE [dbo]. [Sp_GetAllAssignmentData_Paged] @currentPage INT = 1, @pageSize INT = 20ASBEGIN SET NOCOUNT ON; с AssignmentData As (выберите ROW_NUMBER () более (порядок по a.StockNo desc) AS [Row], a.StockNo, c.ClaimNo, v. [Год], v.Make, v.Model, c.DOAssign, c. InsuranceComp, c.Location, c.Status из dbo.Assignments a, dbo.Assignment_ClaimInfo c, dbo.Assignment_VehicleInfo v, где (a.AssignmentID = c.AssignmentID) и (v.AssignmentID = c.AssignmentID), SELimNo, Claim [Год], Марка, Модель, DOAssign, InsuranceComp, Местоположение, [Статус] FROM AssignmentData WHERE Строка между ((@currentPage - 1) * @pageSize + 1) и (@ currentPage * @ pageSize) заказать по a.StockNo desc
END


Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...