ALTER PROCEDURE [dbo].[spInsert]
(@PlanName Varchar(50)=null
,@StartDate Datetime
,@EndDate Datetime
,@ModifiedBy Varchar(100)=null
,@ReturnValue Int Out)
As
BEGIN
IF NOT EXISTS(SELECT PlanName FROM dbo.tblPlan WHERE PlanName=@PlanName)
BEGIN
IF((SELECT COUNT(*) FROM tblPlan WHERE StartDate <= @StartDate AND EndDate <=
@EndDate)<0)
BEGIN
INSERT INTO dbo.tblPlan VALUES(3,@PlanName,@StartDate,@EndDate,@ModifiedBy,GETDATE(),
(SELECT DATEDIFF(DD,@StartDate,@EndDate)))
SET @ReturnValue=1;
END
ELSE
SET @ReturnValue=-2;
END
ELSE
SET @ReturnValue=-1;
END
私は以下のことを達成しようとしています.ユーザーが提供したstartDateとEnddateが既存のテーブルのstartdateとenddateの間にあることを確認したい. ユーザー指定の日付範囲のいずれかの日付がテーブルの開始日と終了日の間にある場合は -2 を返し、レコードが存在しない場合は詳細を挿入する必要があります。
私は間違っていたこのロジックを達成できませんでした..これに対する解決策を教えてください。
編集: 最初の条件は、planName が存在するかどうかを確認します。存在しない場合は、開始日と終了日が既に存在するかどうか (開始と終了を含む) を確認します。返信に記載されているように、2 つの方法を試しました。
例: 既存の開始日と終了日の範囲が Start-2013-10-09、End-2013-10-15 の場合、別の計画を挿入する場合、この計画の開始日と終了日は 10 月 9 日から 15 日の間であってはなりません。開始日と終了日は両方とも 9 日または 15 日であってはなりません。
ONE:IF((SELECT COUNT(*) FROM tblPlan WHERE StartDate <= @StartDate AND EndDate <=
@EndDate)=0)
Result: It does not insert any data, even it is out of previous date. or with in the
range
SECOND:IF((SELECT COUNT(*) FROM tblPlan WHERE StartDate>=@StartDate AND
EndDate<=@EndDate)=0)
RESULT: It insert the date with out Considering the above condition.