簡體   English   中英

SQL Server:使用變量將數據插入臨時表

[英]SQL Server : insert data into temporary table using a variable

我正在嘗試將@date中的結果插入臨時表中,這是我的公司

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

無論如何,我可以將結果插入臨時表中嗎? 如果是這樣...怎么辦?

任何幫助都可以。 謝謝!

如果我已正確理解您的問題,則此方法應該有效。

    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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM