T-SQL跳过存储过程

Pet*_*ies 22 sql t-sql sql-server pagination

我似乎在这个网站上没有太多运气,仍然永远是乐观主义者,我会继续努力.我有两个表,Journals和ArticleCategories使用此查询加入:

SELECT Journals.JournalId,
       Journals.Year,
       Journals.Title,
       ArticleCategories.ItemText
FROM   Journals
       LEFT OUTER JOIN ArticleCategories
         ON Journals.ArticleCategoryId = ArticleCategories.ArticleCategoryId 
Run Code Online (Sandbox Code Playgroud)

任何人都可以告诉我如何重写这个使它成为一个Skip,Take查询.换句话说,我希望它跳过前n个记录,然后取下一个n.我认为ROW_NUMBER涉及某个地方,但在这种情况下我无法弄清楚如何使用它.

我怀疑没有太多运气的原因是我发现很难解释我想要做什么.如果我的问题不明确,请不要犹豫,告诉我哪里出错了,我很乐意再试一次.也许我还应该提一下,我试图把它放在一个存储过程中.非常感谢.非常感谢,

Mar*_*ith 60

对于2005/2008/2008 R2

;WITH cte AS
(
    SELECT  Journals.JournalId, 
            Journals.Year, 
            Journals.Title, 
            ArticleCategories.ItemText,
            ROW_NUMBER() OVER 
                     (ORDER BY Journals.JournalId,ArticleCategories.ItemText) AS RN
    FROM    Journals LEFT OUTER JOIN
            ArticleCategories 
             ON Journals.ArticleCategoryId = ArticleCategories.ArticleCategoryId
)
    SELECT  JournalId, 
            Year, 
            Title, 
            ItemText
FROM cte
WHERE RN BETWEEN 11 AND 20
Run Code Online (Sandbox Code Playgroud)

对于2012年,这更简单

SELECT Journals.JournalId,
       Journals.Year,
       Journals.Title,
       ArticleCategories.ItemText
FROM   Journals
       LEFT OUTER JOIN ArticleCategories
         ON Journals.ArticleCategoryId = ArticleCategories.ArticleCategoryId
ORDER  BY Journals.JournalId,
          ArticleCategories.ItemText 
OFFSET  10 ROWS 
FETCH NEXT 10 ROWS ONLY 
Run Code Online (Sandbox Code Playgroud)