2017-03-28 1 views
1

내가 임시 테이블에 @date에 결과를 삽입하는 것을 시도하고있다가, 여기에 내가 결과를 삽입 얻을 수 있다는 것을 어쨌든 거기에 내 공동SQL 서버 :

DECLARE @MinDate DATE = CONVERT(VARCHAR(15), DATEADD(month, DATEDIFF(MONTH, 0, GETDATE()), 0), 101), 
     @MaxDate DATE = CONVERT(VARCHAR(15), EOMONTH(GETDATE()), 101), 
     @dayInMonth VARCHAR(15); 

DECLARE @date DATE; 
DECLARE @counter INT = 0; 

DECLARE my_cursor CURSOR LOCAL STATIC READ_ONLY FORWARD_ONLY FOR 
    SELECT TOP 
     (Datediff(day, @MinDate, @MaxDate) + 1) Date = Dateadd(day, Row_number() OVER(ORDER BY a.object_id) - 1, @MinDate) 
    FROM 
     sys.all_objects a 
    CROSS JOIN 
     sys.all_objects b; 

OPEN my_cursor 

FETCH next FROM my_cursor INTO @date 

WHILE @@FETCH_STATUS = 0 
BEGIN 
    IF(@counter = 15) 
    BEGIN 
     --PRINT @date 
     --PRINT @date -- here is where you get the 15th date 
     IF DAY(@date) BETWEEN 10 AND 20 
     BEGIN 
      SET @date = DATEADD(DAY,(15-DATEPART(DAY,@date)),@date) 
      PRINT CONVERT(VARCHAR(15), @date, 101) 
      SET @counter = 0 
     END 

     IF @counter = 0 
     BEGIN 
      SET @date = DATEADD(DAY,(30-DATEPART(DAY,@date)),@date) 
      PRINT CONVERT(VARCHAR(15), @date, 101) 
     END 
    END 

    SET @counter = @counter + 1 

    FETCH next FROM my_cursor INTO @date 
END 

CLOSE my_cursor 
DEALLOCATE my_cursor 

있는 변수를 사용하여 임시 테이블에 데이터를 삽입 임시 테이블에? 그렇다면 ... 어떻게?

도움이 될 것입니다. 감사!

+0

실제로 실제로 삽입 하시겠습니까 ?? u는 커서 안에 인쇄 된 ?? –

+0

@NewazSharif 맞습니다. –

+0

임시 테이블 ('# someTable' 또는'## someTable')이 코드에 표시되지 않습니다. "테이블 변수"('@ someTable')를 원하셨습니까? – stakx

답변

2

질문을 올바르게 이해했다면 제대로 작동합니다.

DECLARE @MinDate DATE = CONVERT(VARCHAR(15),DATEADD(month, DATEDIFF(MONTH, 0, GETDATE()), 0), 101), 
     @MaxDate DATE = CONVERT(VARCHAR(15),EOMONTH(GETDATE()),101), 
--DECLARE @MinDate DATE = '20170301', 
--  @MaxDate DATE = '20170331', 
     @dayInMonth VARCHAR(15); 
DECLARE @date DATE; 
DECLARE @counter INT = 0; 

DECLARE my_cursor CURSOR LOCAL STATIC READ_ONLY FORWARD_ONLY FOR 
    SELECT TOP (Datediff(day, @MinDate, @MaxDate) + 1) Date = 
    Dateadd(day, Row_number() 
       OVER( 
        ORDER 
    BY a.object_id) - 1, @MinDate) 
    FROM sys.all_objects a 
     CROSS JOIN sys.all_objects b; 


Create table #temp (datevar varchar(15)) 
OPEN my_cursor 

FETCH next FROM my_cursor INTO @date 

WHILE @@FETCH_STATUS = 0 
    BEGIN 
     IF(@counter = 15) 
     BEGIN 
     --PRINT @date 
     --PRINT @date -- here is where you get the 15th date 
      IF DAY(@date) BETWEEN 10 AND 20 
       BEGIN 
       SET @date = DATEADD(DAY,(15-DATEPART(DAY,@date)),@date) 
       insert into #temp values (CONVERT(VARCHAR(15), @date, 101)) 
       PRINT CONVERT(VARCHAR(15), @date, 101) 
       SET @counter = 0 
       END 
       IF @counter = 0 
       BEGIN 
       SET @date = DATEADD(DAY,(30-DATEPART(DAY,@date)),@date) 
       insert into #temp values (CONVERT(VARCHAR(15), @date, 101)) 
       PRINT CONVERT(VARCHAR(15), @date, 101) 
       END 
     END 
     SET @counter = @counter + 1 
     FETCH next FROM my_cursor INTO @date 
    END 

CLOSE my_cursor 
DEALLOCATE my_cursor 

select * from #temp 
+0

감사합니다. 이것은 내가 성취하고자하는 것입니다 ... 정말 고마워요! –