gpt4 book ai didi

sql-server - 使用 OFFSET-FETCH,如何将行数默认为 "all rows"?

转载 作者:行者123 更新时间:2023-12-03 02:28:11 24 4
gpt4 key购买 nike

设想一个存储过程,它采用@skip(偏移量)和@take(要返回的最大行数。如果@takenull,那么我想返回“应用偏移量后的所有行”。

如果@takenull,我可以通过计算表/ View 中的行数来完成此操作,但随后我必须执行两个查询,即当然,不是最优的。我希望有一个类似于 FETCH [NEXT] ALL ROWS 的选项。

DECLARE @skip BIGINT = 0;
DECLARE @take BIGINT = NULL;

IF (@take IS NULL) SET @take = (SELECT COUNT(*) FROM SomeTable);

SELECT *
FROM SomeTable
ORDER BY SortOrder
OFFSET @skip ROWS
FETCH NEXT @take ROWS ONLY

最佳答案

您可以使用COALESCE:

DECLARE @skip BIGINT = 0;
DECLARE @take BIGINT = NULL;

SELECT *
FROM SomeTable
ORDER BY SortOrder
OFFSET COALESCE(@skip,0) ROWS
FETCH NEXT COALESCE(@take,0x7ffffff) ROWS ONLY

LiveDemo

0x7ffffff2147483647 最大 INT 值相同。

当未提供@skip@take时,它将从表中获取前2^31-1条记录。

关于sql-server - 使用 OFFSET-FETCH,如何将行数默认为 "all rows"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34772015/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com