Ver Mensaje Individual
  #12 (permalink)  
Antiguo 12/10/2015, 12:57
X_fran
 
Fecha de Ingreso: octubre-2007
Mensajes: 273
Antigüedad: 16 años, 7 meses
Puntos: 5
Respuesta: Evitar solapamiento de periodos

Weno, haciendo pruebas, creo que resolví, no es muy eficiente pero ahí va:

CREATE PROCEDURE [dbo].[liquidacion_ChequearPeriodoLiquidar]
@periodoIni datetime,
@periodoFin datetime,
@productorId int,
@zafraId int
-- WITH ENCRYPTION
AS

DECLARE @existeLiquidacion bit
SET @existeLiquidacion = 0

IF EXISTS(
SELECT id_liq FROM dbo.liquidacion l
INNER JOIN dbo.documento d ON l.id_liq = d.id_documento
WHERE
(d.zafra_id = @zafraId)
AND
(
(l.productor = @productorId) AND (l.fecha_inicio BETWEEN @periodoIni AND @periodoFin)
)
OR
(
(l.productor = @productorId) AND (l.fecha_fin BETWEEN @periodoIni AND @periodoFin)
)

)
BEGIN
SET @existeLiquidacion = 1
goto DEVOLVER_RESULTADO
END

IF EXISTS(
SELECT id_liq FROM dbo.liquidacion l
INNER JOIN dbo.documento d ON l.id_liq = d.id_documento
WHERE (d.zafra_id = @zafraId) AND (l.productor = @productorId)
AND (l.fecha_inicio > @periodoIni) AND (l.fecha_fin >= @periodoFin)
)
BEGIN
SET @existeLiquidacion = 1
goto DEVOLVER_RESULTADO
END

IF EXISTS(
SELECT id_liq FROM dbo.liquidacion l
INNER JOIN dbo.documento d ON l.id_liq = d.id_documento
WHERE (d.zafra_id = @zafraId) AND (l.productor = @productorId)
AND (l.fecha_inicio BETWEEN @periodoIni AND @periodoFin) AND (l.fecha_fin > @periodoFin)
)
BEGIN
SET @existeLiquidacion = 1
goto DEVOLVER_RESULTADO
END

IF EXISTS(
SELECT id_liq FROM dbo.liquidacion l
INNER JOIN dbo.documento d ON l.id_liq = d.id_documento
WHERE (d.zafra_id = @zafraId) AND (l.productor = @productorId)
AND ((@periodoIni >= l.fecha_inicio ) AND (@periodoFin <= l.fecha_fin))
)
BEGIN
SET @existeLiquidacion = 1
goto DEVOLVER_RESULTADO
END

DEVOLVER_RESULTADO:
SELECT @existeLiquidacion

GO