2012-03-07 12 views
0

私はテーブルを持っており、すべての行はID,DateおよびValueの列を持ちます。私は、その人が私のWebサイト上のページにアクセスするたびに、その日がまだ存在しない場合は、範囲内の各日の行を挿入するストアドプロシージャを実行するようにします。日付範囲内の日ごとに行を挿入するにはどうすればよいですか?

日付範囲は2012年1月1日から現在の日の前の土曜日(ページがアクセスされた日)までとなります。 IDは自動的に生成され、ValueフィールドはNULL /空白のままです。

たとえば、今日のページにアクセスした場合、2012年1月1日から2012年3月3日までの毎日のレコードがテーブルから必要になります。

+0

ストアドプロシージャにループを作成するだけです。 –

+0

@ダニエルループよりもはるかにエレガントなソリューションがあります。 –

+0

@AaronBertrand:私はそれを理由としてコメントしました:-) –

答えて

3

これは、まだ存在しない日をすべて取得し、前の土曜日の後の行を除外します。

;WITH d AS 
(
    SELECT TOP (366) d = DATEADD(DAY, ROW_NUMBER() OVER (ORDER BY object_id), '20111231') 
    FROM sys.all_objects 
) 
INSERT dbo.[a table]([Date]) 
    SELECT d FROM d 
    WHERE d NOT IN (SELECT [Date] FROM dbo.[a table]) 
    AND d <= DATEADD(DAY, 0-DATEPART(WEEKDAY, GETDATE()), GETDATE()); 

あなたの暦年が過ぎると、これを「リセット」することを前提としています。

+0

ページが土曜日にヒットした場合は、前の土曜日に取得したいと考えています。私はそれが土曜日の午後11時59分59秒かどうか気にしない、私は前の土曜日を取得したい。 –

+0

追加した追加のWHERE節がこれを行います。 3/3のページに当たった場合、2/25まで返されます。 –

関連する問題