【发布时间】:2013-10-07 05:00:45
【问题描述】:
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,如果要插入另一个计划,则该计划的开始和结束日期不应介于 9 日之间10 月 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.
【问题讨论】:
-
StartDate <= @StartDate AND EndDate <= @EndDate检查这些条件不应该像StartDate >= @StartDate AND EndDate <= @EndDate
标签: sql-server