- :
CREATE FUNCTION [dbo].[GetRunningNumbers](@counter INT=10000000, @StartAt INT=0)
RETURNS TABLE
AS
RETURN
WITH E1(N) AS(
SELECT 1 FROM(VALUES (1),(1),(1),(1),(1),(1),(1),(1),(1),(1))t(N)
),
E2(N) AS(SELECT 1 FROM E1 a CROSS JOIN E1 b),
E4(N) AS(SELECT 1 FROM E2 a CROSS JOIN E2 b),
E8(N) AS(SELECT 1 FROM E4 a CROSS JOIN E4 b),
CteTally AS(
SELECT TOP(ISNULL(@counter,1000000)) ROW_NUMBER() OVER(ORDER BY(SELECT NULL)) -1 + ISNULL(@StartAt,0) As Nmbr
FROM E8
)
SELECT * FROM CteTally;
GO
:
DECLARE @tbl TABLE(d1 DATETIME, d2 DATETIME);
INSERT INTO @tbl VALUES({d'2015-03-01'},{d'2015-03-04'})
,({d'2015-03-05'},{d'2015-03-09'});
DECLARE @CheckStart DATETIME={d'2015-03-03'};
DECLARE @CheckEnd DATETIME={d'2015-03-08'};
WITH AllCheckDates AS
(
SELECT DATEADD(DAY,Nmbr,@CheckStart) AS RunningDate
FROM dbo.GetRunningNumbers(DATEDIFF(DAY,@CheckStart,@CheckEnd)+1,0)
)
SELECT CASE WHEN EXISTS ( SELECT * FROM AllCheckDates WHERE NOT EXISTS ( SELECT * FROM @tbl AS t WHERE RunningDate BETWEEN t.d1 AND t.d2 ) )
THEN 0 ELSE 1 END AS AllDatesCoveredInIntervall
2015-04-05:
DELETE FROM @tbl;
INSERT INTO @tbl VALUES({d'2015-03-01'},{d'2015-03-04'})
,({d'2015-03-06'},{d'2015-03-09'});
WITH AllCheckDates AS
(
SELECT DATEADD(DAY,Nmbr,@CheckStart) AS RunningDate
FROM dbo.GetRunningNumbers(DATEDIFF(DAY,@CheckStart,@CheckEnd)+1,0)
)
SELECT CASE WHEN EXISTS ( SELECT * FROM AllCheckDates WHERE NOT EXISTS ( SELECT * FROM @tbl AS t WHERE RunningDate BETWEEN t.d1 AND t.d2 ) )
THEN 0 ELSE 1 END AS AllDatesCoveredInIntervall
GO
...
DROP FUNCTION dbo.GetRunningNumbers;
GO