2014-02-12 66 views
0

我写了这个查询得到的数据为特殊的关键字:如何在INNER JOIN中使用SQL ROW_NUMBER?

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” 命名列。它是而不是寻找Papers中的PID列。只需放下大括号:

 ORDER BY Papers.PID ASC 
+1

或[论文]。[PID]。 –