SQL Server 2005 の組み込み機能から、30 ~ 35 分ごとに実行するようにスケジュールします。これは以下のクエリです。
UPDATE PREMIUM_SERVICE2 SET ndays = ndays - 1
WHERE strAccountID NOT IN
(SELECT strAccountID FROM CURRENTUSER)
AND ndays > 0 AND (PremStart < DATEADD(DAY,-1,GETDATE()))
DELETE FROM PREMIUM_SERVICE2 where nDays = 0
しかし、1つの問題があります。ウェブサイトからプレミアムを取得すると、それが追加されます10/11/2013 11:50:40 PM
。つまり、上記の 2 つのクエリが実行されると、約 1 日ではなく、 30 分ごとに常に-1
オンになります。nDays
だから、私はそれを次のように追加することを考えました:
UPDATE PREMIUM_SERVICE2 SET ndays = ndays - 1, PremStart = GetDate()
WHERE strAccountID NOT IN
(SELECT strAccountID FROM CURRENTUSER)
AND ndays > 0 AND (PremStart < DATEADD(DAY,-1,GETDATE()))
DELETE FROM PREMIUM_SERVICE2 where nDays = 0
そのため、更新時に更新も行われますPremStart
が、30 分を逃す可能性があり、30 日間のプレミアムがある場合は、少なくとも 1 日は誤って追加される可能性があるため、それは悪いことです。スケジュールされたジョブは 30 分ごとに実行されます。では、最初のクエリを編集して、より正確になり、実際に合格した場合にのみ実際に 1 日を差し引くにはどうすればよいでしょうか? 皆さんが私の言いたいことを理解してくれることを願っています。SQL Server 2005 を使用しています