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 是否存在,如果不存在,则要检查开始和结束日期是否已经存在(包括开始和结束)我尝试了回复中建议的两种方法。
例如:如果现有的开始和结束范围是 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.