Jos*_* M. 4 t-sql sql-server stored-procedures sql-server-2012 sql-server-2014
设想一个存储过程,它接受@skip
(偏移)和@take
(要返回的最大行数.如果@take
是null
,那么我想返回"应用偏移后的所有行".
我可以通过计算表/视图中的行数来实现这@take
一点null
,但是我必须执行两个查询,这当然不是最佳的.我希望有一个类似的选项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
Run Code Online (Sandbox Code Playgroud)
你可以使用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
Run Code Online (Sandbox Code Playgroud)
0x7ffffff
与2147483647
最大值相同INT
.
当提供@skip
和@take
未提供时,它将从表中获得前2 ^ 31-1条记录.
归档时间: |
|
查看次数: |
1767 次 |
最近记录: |