我有一个存储过程,我正在尝试将初始拉入设置为表。
基于参数@being_date和@end_date,存储的proc拉取数据并将其聚合为大约20个客户端。
然而,第21位客户有一个独特的情况。
201501之后的数据应从特定地理位置的特定表中提取。区域。 应该从all_employees表中提取201501之前的数据。
由于这个要求,我无法执行整个范围201401到201803的proc。我必须按月运行它。
create procedure sp_agg_emp_data (@begin_month int, @end_month int, @clientid varchar(30))
as
begin
declare @cutoff_month int
IF @clientid = 'NNA'
BEGIN
select @cutoff_month = min(monthofs) from all_na_employees
IF @begin_month < @cutoff_month
begin
select *
into _agg_emp
from all_employees
end
else
begin
select *
into _agg_temp
from (
select *
from all_employees where geo_region <> 'NA'
union all
select *
from all_na_employees where geo_region = 'NA'
) x
end
end
ELSE
BEGIN
select *
into _agg_emp
from all_employees
END
end
执行挂起: 从all_employees中选择@cutoff_month = min(monthofs)
查询计划没有显示任何异常。
有更简单优雅的方法吗?
更新 - 添加详细信息
我打开了SSMS中的执行计划并打印了调试语句。跑步不会超出这一步。
答案 0 :(得分:0)
一个原因是列monthofs
上没有索引。也许all_na_employees
有很多行,或者它是一个视图或计算monthofs
。尝试添加索引以对其进行排序DESC
。