下の行を参照してください。クエリで何が問題になりますか?
FID | IssueDate | IssueType | Status
46128 | 2010-12-30 00:00:00.000 | 2 | 1
を私は初心者があまりにも行うことができ、非常に愚かなことでstuckedています。私は上記の行を更新する必要があります。私はすでにさまざまな方法で同じものを求めていますが、まだ達成されていません。どうしてか分かりません????。
は私が
FID
上記の問題の種類はステッカーや状態の私のタイプは、ステッカーの現在の状態であり、発行日が私のステッカー発行日で、私の主キーで説明しましょう。今、4月1日現在の発行年月日を確認します。有効期限の最終日が確定した3月31日からシステムの日付が変更された場合、その行のステータスは自動的に期限切れとなり、ステータスは1から3に変更されます。
私は、 0行が更新されました。私が間違っているところで私を案内してください。
ALTER PROCEDURE [dbo].[spMakeStickerVoid]
(
@FisherId BIGINT,
@ManipulatedByUser VARCHAR(50),
@OPParam INT OUTPUT
)
AS
BEGIN
DECLARE @CurrentDate as DATETIME,
@FirstAprilOfCurrentYear AS DATETIME
SET @FirstAprilOfCurrentYear = (select dateadd(month,datediff(month,0,getdate()) ,'18990401'));
SET @CurrentDate = GETDATE();
--SET @OPParam =0
IF @CurrentDate >= @FirstAprilOfCurrentYear
BEGIN
UPDATE tblStickerInfo
SET StatusId = 3
WHERE FisherId = 46128 AND (IssuedDate < @FirstAprilOfCurrentYear) AND StatusId = 1
END
--SET @OPParam =1
END
UPDATE:
実際には、いくつかの条件がある **
1. It should occur every year 1st April or onwards.
2. All issue dates that are on or before 31st March of that year will get
expires, status =3
3. So i put a check if current date is 1st april or greater than that.
because there might be a condition if the system was switched off on 1st april
and started working on 4 th April. So even in this case the stickers prior to
1st april will have to expire.
4. For making my query clear, just take an example of Insurance policy ,
which is only valid for a year. Like if i have registered it on 28th Jan2011,
then it will automatically get expired on next year 27th Jan 2012 midnight.
But here in my case date is fixed to 31st March midnight every year.
5. Columns names and parameters are not an issue here, i had
placed somewhat diff here consider FID = FisherId
6. Need a query that will automatically populate the @FirstAprilOfEveryYear
with first april of that year, so that it will be carried out automatically.
**
たくないかもしれないものを私は私の心に、現在の年の最初の4月の意味で混乱したタッチだ2011.04.01''(DATEADD選択(月、 datediff(月、0、getdate())、 '18990401')) 'が返す2010.04.01 - これは予想される動作ですか? – Robb
あなたの質問には、間違った列名が含まれています。おそらく 'UPDATE tblStickerInfo SET Status = 3 WHERE FID = 46128とIssueDate <@FirstAprilOfCurrentYear AND Status = 1'であるべきです。 –
これを4日間で実行すると、 '@ FirstAprilOfCurrentYear'変数には昨年の最初の年が含まれます(2010-05-01) –