毎晩実行するSQLサーバにストアドプロシージャがあります。目的は、2つの日付の間の差を計算し、残りを列に入れることです。SQL文でOpen Cursorの中で条件文を実行する方法
私は以下のフィールドを持っています:期日、今日の日付、進捗状況、残りの日。私は、今日の日付と期日との差を計算し、差異を残りの日の列に保存します。
しかし、進捗列の値を確認したい場合は、進捗状況が「完了」であれば残りの日の更新をスキップします。
このようにして、ジョブが完了した場合、残りの日数は、差が今日の日付からさらに遠ざかるにつれてカウントダウンを続けることはありません。
これまで私がこれまで持っていたことは次のとおりです。これは、進行状況列の条件付きチェック以外のすべてに対して機能します。私は使用しているカーソルの中でそれを行う方法を知らない。
DECLARE @due_date DATE
DECLARE @difference varchar(50)
DECLARE @id INT
DECLARE myCursor CURSOR FORWARD_ONLY FOR
SELECT [Engr Due] FROM dbo.Employee_Table
OPEN myCursor
FETCH NEXT FROM myCursor INTO @due_date
WHILE @@FETCH_STATUS = 0 BEGIN
SELECT @difference = DATEDIFF(day, GETDATE(), @due_date)
UPDATE Employee_Table
SET [Remaining Days][email protected]
WHERE CURRENT OF myCursor
FETCH NEXT FROM myCursor INTO @due_date
END
CLOSE myCursor
DEALLOCATE myCursor
なぜあなたはすべてでカーソルを使用していますか?これは 'update Employee_Table set [Remaining Days] = DATEDIFF(日、GETDATE()、[Engr Due])'と置き換えることができるようです。 – Blorgbeard
'Progress'のことは' Progress'の値が 'Complete'の行の更新をスキップしたいだけですか?もしそうなら、 'どこにProgress <> 'Complete'を追加してください。 – Blorgbeard
Blorgbeard、あなたは正しいです、カーソルを使用する理由は、私がこのようなストアドプロシージャを新たに使用したためです。「SQLテーブルを反復して値を設定する方法」のほとんどの結果がカーソルを指しています。だから私はちょうどそれに立ち往生しましたが、あなたは有効なポイントを持っています。 – jakoh77