Restrição de verificação de sobreposição no intervalo de datas

Eu tenho uma tabela simples no sql server 2005 com 3 colunas: DateStart, DateEnd e Value. Eu tentei definir uma "restrição de verificação de tabela" para evitar a inserção de registros sobrepostos. Por exemplo, se nessa tabela houver um registro com DateStart = 2012-01-01 (primeiro janeiro) e DateEnd 2012-01-15 (15 de janeiro), a restrição Check deve evitar a inserção de um registro com DateStart = 2012-01-10 ( no care DateEnd), um registro com DateEnd = 2012-01-10 (sem tratamento DateStart) ou um registro com DateStart 2011-12-10 e DateEnd 2012-02-01.

Eu defini um UDF de tal maneira:

CREATE FUNCTION [dbo].[ufn_checkOverlappingDateRange]
(
    @DateStart AS DATETIME
    ,@DateEnd AS DATETIME
)
RETURNS BIT 
AS
BEGIN
  DECLARE @retval BIT
  /* date range at least one day */
  IF (DATEDIFF(day,@DateStart,@DateEnd) < 1)
    BEGIN
      SET @retval=0
    END
  ELSE
    BEGIN
      IF EXISTS
        (
          SELECT
              *
            FROM [dbo].[myTable]
            WHERE
            ((DateStart <= @DateStart) AND (DateEnd > @DateStart))
            OR
            ((@DateStart <= DateStart) AND (@DateEnd > DateStart))
        )
        BEGIN
          SET @retval=0
        END
    ELSE
      BEGIN
            SET @retval=1
          END
        END
  RETURN @retval
END

Então pensei que cheque poderia ser isso:

ALTER TABLE [dbo].[myTable]  WITH CHECK ADD  CONSTRAINT [CK_OverlappingDateRange] CHECK  ([dbo].[ufn_checkOverlappingDateRange]([DateStart],[DateEnd])<>(0))

Mas mesmo com [myTable] vazio, o operador EXISTS retorna true quando eu insiro o primeiro registro. Onde eu estou wrog? É possível definir uma restrição como essa?

BTW eu considero DateStart inclui no intervalo e DateEnd exclui do intervalo.

questionAnswers(2)

yourAnswerToTheQuestion