SQL While循环排序

时间:2013-02-01 20:05:19

标签: sql if-statement while-loop create-table

尝试使用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

3 个答案:

答案 0 :(得分:1)

您需要DECLARE @todaysDate DATE = getdate()DECLARE @countIndex INT = 0

此外,您可能需要IF (@countIndex > 365) BREAK

答案 1 :(得分: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

答案 2 :(得分: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 Fiddle

祝你好运。