2014-02-12 6 views
0

Я написал этот запрос, чтобы получить данные для специального ключевого слова:Как использовать SQL ROW_NUMBER с INNER JOIN?

ALTER procedure [dbo].[GetAllSpecialPaperTags] 
    @PKeyword nvarchar(200) 
as 
begin 
    select 
     Papers.PID, Papers.PTitle, Papers.PaperSummary 
    from 
     PaperKeywords 
    left join 
     PaperTags on PaperKeywords.PKeyID = PaperTags.PKeyID 
    left join 
     Papers on PaperTags.PID = Papers.PID 
    where 
     PaperKeywords.PKeyword = @PKeyword 
end 

Я хочу использовать эту статью для пользовательского пейджинга: Custom Paging using SQL Server Stored Procedure

Я написал этот запрос, но я получаю сообщение об ошибке:

create procedure [dbo].[GetAllSpecialPaperTags] 
    @PageIndex INT = 1 
    ,@PageSize INT = 10 
    ,@RecordCount INT OUTPUT 
    ,@PKeyword nvarchar(200) 
as 
BEGIN 
     SET NOCOUNT ON; 
     SELECT ROW_NUMBER() OVER 
     (
      ORDER BY [Papers.PID] ASC 
    )AS RowNumber 
    ,Papers.PID , Papers.PTitle , Papers.PaperSummary 
    INTO #Results 
     from PaperKeywords 
     left join PaperTags on PaperKeywords.PKeyID = PaperTags.PKeyID 
     left join Papers on PaperTags.PID = Papers.PID where PaperKeywords.PKeyword = @PKeyword 

     SELECT @RecordCount = COUNT(*) 
     FROM #Results 

     SELECT * FROM #Results 
     WHERE RowNumber BETWEEN(@PageIndex -1) * @PageSize + 1 AND(((@PageIndex -1) * @PageSize + 1) + @PageSize) - 1 

     DROP TABLE #Results 
end 

Ошибка:

Msg 207, Level 16, State 1, Procedure GetAllSpecialPaperTags, Line 11
Invalid column name 'Papers.PID'.

Почему?

ответ

3

Это ваш order by выражение:

 ORDER BY [Papers.PID] ASC 

Он ищет колонку с именем во всей его полноте "Papers.PID". Это не ищет PID столбец в Papers. Просто опустите скобы:

 ORDER BY Papers.PID ASC 
+1

или [Papers]. [PID]. –