根据条件使用下一个偏移量的最佳方法是什么。
有这样的想法,但编译错误。
declare @Condition bit
select
canvas.CanvasName,
c.CompanyID,
c.CompanyName
from JobCanvas_B2B canvas
inner join JobActivity act on act.CanvasId = canvas.CanvasId
inner join [Person_5.4] p on p.JobCanvasId = canvas.CanvasId
inner join Person pers on pers.PersonId = p.PersonId
inner join Company c on c.CompanyID = pers.CompanyId
where act.NextDateD between @StartDate and @EndDate
order by act.InteractionDateD desc
if(@Condition = 1)
begin
offset @SkipRows rows
fetch next @PageSize rows only
end
答案 0 :(得分:1)
假设您可以为返回的行数选择一个合理的默认上限,只需使用一些CASE
表达式:
declare @Condition bit
select
canvas.CanvasName,
c.CompanyID,
c.CompanyName
from JobCanvas_B2B canvas
inner join JobActivity act on act.CanvasId = canvas.CanvasId
inner join [Person_5.4] p on p.JobCanvasId = canvas.CanvasId
inner join Person pers on pers.PersonId = p.PersonId
inner join Company c on c.CompanyID = pers.CompanyId
where act.NextDateD between @StartDate and @EndDate
order by act.InteractionDateD desc
offset CASE WHEN @Condition = 1 THEN @SkipRows ELSE 0 END rows
fetch next CASE WHEN @Condition = 1 THEN @PageSize ELSE 1000000 END rows only
您不能在定义查询的过程中“停下来”,而是开始编写控制流语句(例如IF
)来决定应如何构造查询的一部分。