0

尝试使用 while 循环将日期数据类型输入到表中。我的循环中断不起作用,输入值显示为 NULL。

帮助将不胜感激

DECLARE @StartDate DATE
DECLARE @countIndex INT
DECLARE @yearDate DATE
DECLARE @todaysDate DATE
SET @StartDate = GETDATE()
SET @yearDate = DATEADD(YEAR, 1,@StartDate)

CREATE TABLE DateLookup
    (
    DateID INT IDENTITY (1,1),
    DateDescription Date
    )

 WHILE (DATEDIFF(DD,@StartDate, @yearDate)) <= 366   
 BEGIN

    SET @countIndex = @countIndex +1

    INSERT INTO DateLookup (DateDescription)
    VALUES (DATEADD (DD,@countIndex,@todaysDate))--DAY(GETDATE()))

    IF (@countIndex < 366)
        Break

END
4

3 回答 3

1

你需要DECLARE @todaysDate DATE = getdate()并且DECLARE @countIndex INT = 0

另外,你可能是说IF (@countIndex > 365) BREAK

于 2013-02-01T20:07:45.770 回答
0

你永远不会将@countIndex 设置为 0;它是 NULL,这意味着当您向其添加 1 时它始终为 NULL。@todaysDate 也有同样的问题。

如果您想完全避免 WHILE 循环,您可以将一些东西拼凑在一起,如下所示:

; WITH    seed
          AS ( SELECT   ROW_NUMBER() OVER ( ORDER BY name ) AS n
               FROM     sys.columns
             )
    SELECT TOP 366
            DATEADD(Day, n - 1, GETDATE())
    FROM    seed
于 2013-02-01T20:10:03.637 回答
0

如果您需要做的就是在 DateLookup 表中插入接下来的 365 天,为什么不使用这样的东西(假设您的意思是 SQL Server,取决于您的 RDBMS):

INSERT INTO DateLookup  (DateDescription)
SELECT DATEADD(DD,Number,GETDATE())
FROM master..spt_values 
WHERE Number BETWEEN 1 AND 365 AND Type = 'P'

这是SQL 小提琴

祝你好运。

于 2013-02-01T20:14:04.310 回答