SQL CURSOR

DECLARE @CurrentDate DATETIME
DECLARE @CurrentDateStr VarCHAR(200)
DECLARE @CloseTime int

DECLARE @CTRLTIME Date
DECLARE @DCFLG CHAR(1)
DECLARE @TERMID CHAR(5)

DECLARE @Exist_Cnt int
DECLARE @REC_Cnt int = 0
DECLARE @REC_Cnt_MAX int = 60
DECLARE @Delay_Time int
DECLARE @Delay_Time_MAX int = 60

DECLARE @Temp_ABCD TABLE(
[TERMID] char NOT NULL,
[DCFLG] char NOT NULL,
[AAAA] char NOT NULL,
[BBBB] [int] NOT NULL,
[CCCC] varchar NULL,
[ANS] char NULL,
[ANSCODE]char NULL
);

SET @Delay_Time = 10
SET @Delay_Time_MAX = 60

Declare CUR_ABCD CURSOR FOR
SELECT TERMID
,DCFLG
,BBBB
FROM [KKKK_Common_C].[dbo].[ABCD]

SET @CurrentDate = (SELECT GETDATE())
SET @CurrentDateStr = CONVERT(varchar,@CurrentDate,120)

PRINT ‘@CurrentDateStr = ‘ + @CurrentDateStr

SET @CloseTime = CAST(SUBSTRING(@CurrentDateStr,12,2) as int)
PRINT ‘@CloseTime = ‘ + CAST(@CloseTime AS VARCHAR)

WHILE @REC_Cnt < 10
BEGIN
OPEN CUR_ABCD
FETCH NEXT FROM CUR_ABCD
INTO @TERMID, @DCFLG, @CTRLTIME

 WHILE @@FETCH_STATUS = 0
 BEGIN 
     IF @DCFLG = '1'
     BEGIN
        SET @Delay_Time = CAST(datediff(second,@CTRLTIME,getdate()) as int)
        IF @Delay_Time > @Delay_Time_MAX
        BEGIN
             SELECT @Exist_Cnt = COUNT(*) FROM @Temp_ABCD WHERE [TERMID] = @TERMID AND [CTRLTIME] = @CTRLTIME
             IF @Exist_Cnt = 0
             BEGIN
                 INSERT INTO @Temp_ABCD SELECT* FROM [KKKK_Common_C].[dbo].[ABCD] WHERE [TERMID] = @TERMID
             END
        END
     END

     FETCH NEXT FROM CUR_ABCD
     INTO @TERMID, @DCFLG, @CTRLTIME
 END

 CLOSE CUR_ABCD
 SELECT @REC_Cnt = COUNT(*) FROM @Temp_ABCD

 waitfor delay '00:00:00:10'

END

DEALLOCATE CUR_ABCD

SELECT * FROM @Temp_ABCD

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です