我有一个存储过程,该过程返回记录列表。
在一种情况下(类型= 1),这将根据页码返回前10条记录。
在其他情况下(类型= 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*\
谢谢
答案 0 :(得分:1)
您可以设置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
代码将仅基于您的row_number()
返回10行,否则它将返回全部。
答案 1 :(得分:0)
使用union all
with cte1 as (SELECT ....) ,
cte2 as (SELECT ....) select * from cte union all select * cte2