事件在存储过程中重叠时间验证

时间:2014-07-16 17:26:59

标签: sql database tsql stored-procedures sql-server-2012

我需要帮助,我有一个用于插入日历中显示的事件的存储过程,我打算做的是验证我是否在同一日期的ID_SALA 2或ID_SALA 3中有一个事件不应该有相同的开始和结束时间。

我的ID_SALA只有2行:

ID_SALA | Name
 2      | AUDITORIO
 3      | SALA VIRTUAL

我的格式日期为:YYYY/MM/DD

我的开始和结束参数是:

  @START_TIME NVARCHAR(5) i insert this 11:00
  @END_TIME NVARCHAR(5)   i insert this 12:00

以下是活动日历的图片

My event calendar http://oi62.tinypic.com/97r921.jpg

@DESCRIPCION NVARCHAR(500),
@ID_SALA INT,
@ID_TIPO_SOLICITANTE INT,
@DATE SMALLDATETIME,
@START_TIME NVARCHAR(5),
@END_TIME NVARCHAR(5),
@ID_PRESTATARIO INT,
@ID_USUARIO INT,
@SOLICITANTE NVARCHAR(150),
@AUTORIZACION INT

AS
SET NOCOUNT ON

DECLARE @ID_PERIODO INT

SELECT @ID_PERIODO = ID_PERIODO FROM CAT_PERIODOS WHERE ACTIVO = 1


INSERT INTO PRESTAMO_SALA
    (DESCRIPCION, ID_SALA, ID_TIPO_SOLICITANTE, FECHA_PRESTAMO, HORA_INICIO, HORA_FIN, ID_PRESTATARIO, 

ID_USUARIO, ID_PERIODO, FECHA_REG, SOLICITANTE, ID_AUTORIZACION)
VALUES
    (@DESCRIPCION, @ID_SALA, @ID_TIPO_SOLICITANTE, @DATE, @START_TIME, @END_TIME, @ID_PRESTATARIO, @ID_USUARIO, 

@ID_PERIODO, GETDATE(), @SOLICITANTE, @AUTORIZACION)

SELECT @@IDENTITY AS ID_PRESTAMO_SALA

抱歉我的英文

1 个答案:

答案 0 :(得分:0)

您可以在存储过程的顶部添加一个检查,以查看该位置是否存在与新事件重叠的事件。

IF EXISTS (
  SELECT 1
  FROM PRESTAMO_SALA PS
  WHERE PS.START_TIME <= @END_TIME 
      AND PS.END_TIME >= @START_TIME 
      AND PS.[DATE] = @DATE
      AND PS.ID_SALA = @ID_SALA 
      )

    ... RAISE ERROR ...