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

YOu never set @countIndex to 0; it's a NULL, which means it will always be NULL when you add 1 to it. Same problem with @todaysDate.

If you want to avoid the WHILE Loop altogether, you can kludge something together like so:

; 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

次の 365 日を DateLookup テーブルに挿入するだけでよい場合は、次のようなものを使用しないでください (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です。

幸運を。

于 2013-02-01T20:14:04.310 に答える