跳过“N”行并获取所有可用的

问题描述 投票:0回答:3

我有一个简单的要求,我想跳过“N”行并获取所有可用的。我需要它作为我的存储过程的一部分,例如

 WHERE /*some condition*/   
 ORDER BY 
        /* some case statement */    
OFFSET @SkipRows ROWS FETCH NEXT @TakeRows ROWS ONLY

现在我的要求是如果 @TakeRows 是某个值,比如 -1 我想获取所有行。我试图避免额外的调用来计算行数

sql sql-server database sql-server-2008 query-performance
3个回答
0
投票

你可以这样尝试:

WITH x AS
(
    SELECT col1, col2,
    ROW_NUMBER() OVER (ORDER BY col1) AS rn
    FROM YourTable
)
SELECT col1, col2 FROM  x
WHERE rn BETWEEN @start AND @End

这里@start 和@End 是您想要在其间获取的行。


0
投票

尝试类似的事情,

WHERE /*some condition*/   
ORDER BY 
        /* some case statement */    
OFFSET @SkipRows ROWS FETCH NEXT ISNULL(NULLIF(@TakeRows,-1),999999) ROWS ONLY

0
投票
WHERE /*some condition*/   
 ORDER BY 
        /* some case statement */    
OFFSET @SkipRows ROWS FETCH NEXT @TakeRows ROWS ONLY

如果

@SkipRows
是一个变量,并且如果您想返回 ALL,则应给定行 -1...然后只需使用单独的查询。

IF @SkipRows <= 0
    THEN BEGIN
            SELECT  TOP (@TakeROws) *
            FROM    <table>
            WHERE   <predicate>  
            ORDER BY 
             /* some case statement */    
         END
    ELSE BEGIN
            SELECT  *
            FROM    <table>
            WHERE <predicate>
            ORDER BY /*some case statement*/
            OFFSET @SkipRows ROWS FETCH NEXT @TakeRows ROWS ONLY
         END
    END

或者使用 CASE 语句,无论什么对你有用。

© www.soinside.com 2019 - 2024. All rights reserved.