我有一个简单的要求,我想跳过'N'行并获取所有avaialbe。我需要这个作为我的存储过程的一部分,如
WHERE /*some condition*/
ORDER BY
/* some case statement */
OFFSET @SkipRows ROWS FETCH NEXT @TakeRows ROWS ONLY
现在我的要求是,如果@TakeRows是某个值,则说-1我想要获取所有行。我试图避免额外的调用来计算行数
答案 0 :(得分: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是你想要在其间获取的行。
答案 1 :(得分:0)
尝试类似的事情,
WHERE /*some condition*/
ORDER BY
/* some case statement */
OFFSET @SkipRows ROWS FETCH NEXT ISNULL(NULLIF(@TakeRows,-1),999999) ROWS ONLY
答案 2 :(得分:0)
$(document).on('change','.cart .quantitycolumn .quantityinput' ,function(){ var qty = $(this).closest('.tablerow').find('.quantityinput option:selected').val(); var uuid = $(this).closest('.tablerow').find('.quantityinput').data('uuid'); var newUUID = $(this).closest('.tablerow').find('.quantityinput').data('newuuid'); $('[name=quantityValue]').val(qty); $('[name=ParentUUID]').val(uuid); $('[name=newUUID]').val(newUUID); });
如果WHERE /*some condition*/
ORDER BY
/* some case statement */
OFFSET @SkipRows ROWS FETCH NEXT @TakeRows ROWS ONLY
是一个变量,如果你想返回 ALL ,那么应该给-1行...然后只使用一个单独的查询。
@SkipRows
或使用CASE声明,无论对你有用。
答案 3 :(得分:0)
OFFSET FETCH子句中的FETCH NEXT采用INT或表达式给出INT。
INT的最大大小为2147483647。
select cast(Power(cast(2 as float),32-1)-1 as int) as max_int;
因此,我们可以将这些事实结合起来:
SELECT *
FROM [Some Table]
WHERE /*<where clause>*/
ORDER BY /*<order by clause>*/
OFFSET @SkipRows ROWS
FETCH NEXT (CASE WHEN @TakeRows > 0 THEN @TakeRows ELSE 2147483647 END) ROWS ONLY;
使用SQL Server 2012或更高版本,您可以通过
缩短CASE WHEN
IIF(@TakeRows>0,@TakeRows,2147483647)