12/10/2015, 12:57
|
| | Fecha de Ingreso: octubre-2007
Mensajes: 273
Antigüedad: 17 años, 2 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 |