2017-03-28 8 views
1

私は、一時テーブルに@dateに結果を挿入しようとしていますが、ここで私は結果を挿入することが達成できることがとにかくあり、私の共同SQL Serverは:

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

実際に実際に挿入したいものは何ですか?あなたはカーソル内に印刷された日付?? –

+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

ありがとう!これは私が達成したいことです...ありがとうございます! –