希望有人能提供一些帮助,我目前工作的一段代码,这似乎是有问题。不幸的是我不能发布底层数据,但会尝试解释。虽然循环问题
的代码目前通过选择KPI的周期,如果有什么需要运行或不基于当前时间和是否个人的KPI需要运行计算。目前,如果我硬编码一些kpi的代码工作正常,但如果我让它遍历所有kpi的,那些不应该运行的代码被告知运行,也在选择,定义的东西像@Period,当我让它贯穿所有KPI的设置@Period当它不应该运行,但它的意图运行它设置罚款。
总的来说,我有2个问题,我认为这是相关KPI的运行时,他们并不意味着,当他们正在运行时,他们并不意味着他们拿起错期不管怎样这是奇怪的。我想现在发生的事情是,当我让它一直贯穿KPI的时候,它们混在一起,但我不知道这是怎么发生的,在我发疯之前,任何帮助都会很大。
正如你可以从我的代码看到有2 @current_timestamps,当它设置为23.45.18.873它不应该运行一些kpi的,但它无论如何运行它们,21.45.18.873意味着它们可以运行。
declare @job_current_time_minute float,
@job_current_date_time_minute as datetime,
@current_timestamp as datetime
SET @job_current_time_minute = 52--cast(datepart(minute, getdate()) as float)
SET @job_current_date_time_minute = getdate()
--SET @current_timestamp = cast('2017-04-02 23:45:18.873' as datetime)
SET @current_timestamp = cast('2017-04-02 21:45:18.873' as datetime)
--Run: 88 6 0 52 5 5 5
--Run: 88 1 10 52 5 5 5
declare
@kpi_id int,
@kpi_parent_id int,
@sql nvarchar(max),
@kpi_last_result nvarchar(100),
@kpi_last_runtime datetime,
@kpi_params nvarchar(max),
@kpi_current_time_minute float,
@schedulue_minute float,
@reoccurrence float,
@result float,
@kpi2 int,
-- Email Variables
@kpi_name nvarchar(150),
@kpi_desc nvarchar(150),
@kpi_report_link nvarchar(150),
@kpi_email_subject nvarchar(150),
@kpi_email_body nvarchar(300),
@kpi_email_query nvarchar(max),
@kpi_sms_msg nvarchar(300);
SET @kpi_params = N'@retvalOUT varchar(max) OUTPUT';
select @kpi_id = min(kpi_id) from KPI where KPI_Active = 1; --and kpi_id in (86, 88)
while @kpi_id is not null
begin
select
@kpi_parent_id = kpi_parent_id,
@sql = kpi_Script,
@schedulue_minute = datepart(minute,s.Schedule_Start),
@reoccurrence = s.Reoccurrence,
@result = cast((@job_current_time_minute - datepart(minute,s.Schedule_Start))/s.Reoccurrence as decimal(18,2)),
@kpi_name = kpi_name,
@kpi_desc = kpi_desc,
@kpi_report_link = kpi_report_link,
@kpi_email_subject = kpi_email_subject,
@kpi_email_body = kpi_email_body,
@kpi_email_query = kpi_email_query,
@kpi_sms_msg = kpi_sms_msg,
@kpi_current_time_minute = 60*DATEPART(HOUR, GETDATE())+DATEPART(MINUTE,GETDATE()),
@kpi2 = KPI_ID
from EWI..KPI
inner join EWI..Schedule s on KPI.Schedule_ID = s.Schedule_ID where kpi_id = @kpi_id--order by kpi_id asc
--set @sql = 'select @retvalOUT= (' + @sql + ')'
if floor(@result) <> ceiling(@result)
begin
PRINT 'Not Time to Run: ' + ' ' + cast(@kpi_id as varchar(11)) + ' ' + cast(@result as varchar(11))
end
else
begin
declare
@ThresholdID int,
@PeriodID int,
@Threshold_value int,
@Threshold_PosNeg nvarchar(5)
select @ThresholdID = Threshold_ID, @PeriodID = Period_ID, @Threshold_value = Threshold_value, @Threshold_PosNeg = Threshold_PosNeg from (
-- select * from (
select * from (
select KPI_ID, t.Threshold_ID, p.Period_ID, t.Threshold_Value, t.Threshold_PosNeg, p.DayStartTime, p.DayEndTime, Period_desc, [Day]
from EWI..Threshold t join
EWI..Period p on t.Period_ID = p.Period_ID where KPI_ID = @kpi_id
) x where (case when [Day] = datename(dw,getdate()) then Period_id
when [Day] = choose(datepart(dw, getdate()), 'WEEKEND','Weekday','Weekday','Weekday','Weekday','Weekday','WEEKEND') then Period_ID
when [Day] = 'All' then Period_ID end) is not null
) y where case when datediff(second,DayStartTime,DayEndTime) > 0 then
case when convert(time(0), @current_timestamp) >= DayStartTime and convert(time(0), @current_timestamp) < DayEndTime then 1 else 0 end
else case when convert(time(0), @current_timestamp) >= DayStartTime or convert(time(0), @current_timestamp) < DayEndTime then 1 else 0 end
end = 1
select 'Run: ' + cast(@kpi_id as varchar(11)) + ' ' + cast(@PeriodID as varchar(11)) + ' ' +
cast(@Threshold_value as varchar(11)) + ' ' + cast(@job_current_time_minute as varchar(11)) + ' ' +
cast(@result as varchar(11)) + ' ' +
cast(ceiling(@result) as varchar(11))+ ' ' +cast(floor(@result) as varchar(11))
end
select @kpi_id = min(kpi_id) from KPI where KPI_Active = 1 and kpi_id > @kpi_id;
end
我不想演这个角色,但是......想象你读的问题,你想帮助;你会明白什么吗?你说你不能发布数据;甚至不是其中的一部分,这足以重现问题? –
嗨乔尔戈斯,我完全同意,但试图把这些数据的子集放在一起几乎是不可能的,但我会尝试。我希望这个问题与我的代码的逻辑或我正在做的事情有关。正如我所说,如果我硬编码kpi的,它的工作正常,但是当我让while循环遍历我有问题时。 – PJD
我不认为这与KPI有关,我正在设置一个试图“重现”问题的演示 –