2016-01-14 3 views
0

У меня есть запрос, который должен быть выполнен только тогда, когда мейнфрейм вверх. В течение этих часов мейнфрейм не работает вторник - суббота - с 1 до 6 часов, по воскресеньям - с 1 до 12 часов.Как выполнить запрос только в том случае, если мэйнфрейм встал?

Я пытаюсь объявить переменную, которая получает текущую дату и время, а затем пытается написать логику в инструкции if, чтобы удовлетворить вышеуказанному условию.

if @new_que_stat_cd = 'U' 
BEGIN 

--declare @recv_time datetime = getdate() 
--if CASE WHEN datepart(dw,@recv_time) in ('SUNDAY') AND 
--,'TUESDAY','WEDNESDAY',' 
--declare @ident int = IDENT_CURRENT('SADEV.RO_Transcript.ETQueueCtrl') 
UPDATE NEW SET [ETQueueCtrlStatusCd] = 'U' 
     from sadev.RO_Transcript.ETQueueCtrl NEW 
     where new.[ETQueueCtrlStatusCd] = 'S' 
     AND new.ErrorFl = 'N' 
     and new.VendorTransactionID is not null 
     and new.VendorTransactionIDRcvdDate is not null 
     and new.ETQueueCtrlID = @queuectrl_id 

select new.VendorTransactionIDRcvdDate 
from sadev.RO_Transcript.ETQueueCtrl NEW 
where new.[ETQueueCtrlStatusCd] = @new_que_stat_cd 
     AND new.ErrorFl = 'N' 
     and new.VendorTransactionID is not null 

     and new.ETQueueCtrlID = @queuectrl_id 
END 

БУДЕТ ЭТО ЛОГИКА РАБОТЫ ВЫШЕ УСЛОВИЕ

declare @recv_time datetime = getdate() 
if (convert(varchar,(datepart(DAY,@recv_time))) in ('SUNDAY') 
        AND convert(varchar, @recv_time, 114) between convert(datetime,'01:00') and convert(datetime,'12:00')) 
        or 
    convert(varchar,(datepart(DAY,@recv_time))) in ('Tuesday','Wednesday','Thursday','Friday','Saturday') 
    AND convert(varchar, @recv_time, 114) between convert(datetime,'01:00') and convert(datetime,'06:00') 
+0

будет работать по вышеуказанному запросу – sam

ответ

-1

основе: DATEPART (Transact-SQL)

Попробуйте это:

IF @new_que_stat_cd = 'U' 
BEGIN 
DECLARE @currDate DATETIME=GETDATE(); 
DECLARE @runProcess BIT=0; 
SELECT @runProcess=CASE 
         WHEN DATEPART(dw, @currDate) IN 
                 (3, 4, 5, 6, 7 
                 ) 
         THEN CASE 
           WHEN DATEPART(hh, @currDate) BETWEEN 1 AND 6 
           THEN 1 
           ELSE 0 
          END 
         WHEN DATEPART(dw, @currDate) IN 
                 (1 
                 ) 
         THEN CASE 
           WHEN DATEPART(hh, @currDate) BETWEEN 1 AND 12 
           THEN 1 
           ELSE 0 
          END 
         ELSE 0 
        END; 
IF @runProcess = 1 
BEGIN 
UPDATE NEW 
     SET ETQueueCtrlStatusCd='U' 
FROM sadev.RO_Transcript.ETQueueCtrl NEW 
WHERE new.ETQueueCtrlStatusCd = 'S' 
     AND new.ErrorFl = 'N' 
     AND new.VendorTransactionID IS NOT NULL 
     AND new.VendorTransactionIDRcvdDate IS NOT NULL 
     AND new.ETQueueCtrlID = @queuectrl_id; 
SELECT new.VendorTransactionIDRcvdDate 
FROM sadev.RO_Transcript.ETQueueCtrl NEW 
WHERE new.ETQueueCtrlStatusCd = @new_que_stat_cd 
     AND new.ErrorFl = 'N' 
     AND new.VendorTransactionID IS NOT NULL 
     AND new.ETQueueCtrlID = @queuectrl_id; 
END; 
END; 

Где 3,4,5,6,7 со вторника по субботу соответственно, а 1 - в воскресенье.

+0

Спасибо. Это сработало. – sam

+0

Приятно слышать. :) –

+0

Привет Вышеприведенный запрос не дает никаких ошибок, но данные не обновляются в таблице. – sam