我有一个存储过程,它返回一个记录列表。
在一种情况下(类型= 1),这将返回基于页码的前10个记录。
在其他情况下(type = 2),这将返回所有记录。
选择的列在两种情况下都相同。
我正在使用2 cte来获取所需的数据。
如何实现确定否的动态部分。选择的记录;对性能影响最小。
代码蓝图
with cte1 as
(
SELECT ....
),
cte2 as
(
SELECT ....
)
SELECT
ROW_NUMBER() OVER ( ORDER BY Col1) AS RowId,
cte1.*, cte2.PlanName
FROM
cte1
INNER JOIN
cte2 ON cte2.Id = cte1.Id
WHERE
.....\*different code here*\
谢谢
你可以把像WHERE
这样的where (RowId <=10 and @case=1) or @case=2
条件
您的查询应如下所示。
SELECT *
FROM (SELECT Row_number()
OVER (
ORDER BY col1) AS RowId,
cte1.*,
cte2.planname
FROM cte1
INNER JOIN cte2
ON cte2.id = cte1.id)t
WHERE ( rowid <= 10
AND @case = 1 )
OR @case = 2
如果case=1
上面的代码只返回10行,基于你的row_number()
否则它将全部返回。
使用union all
with cte1 as (SELECT ....) ,
cte2 as (SELECT ....) select * from cte union all select * cte2