Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 как обойти ограничение CTE, количество рекурсий не более 100 (ms sql 2005)  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
IF OBJECT_ID('dbo.dba_getdate_period') IS NOT NULL
    DROP FUNCTION dbo.dba_getdate_period
GO

CREATE FUNCTION [dbo].[dba_getdate_period] ( @StartDate datetime, @EndDate datetime )
RETURNS TABLE
AS
			
RETURN

WITH C AS (
SELECT @StartDate AS d1, dateadd(month,1,dateadd(day,1-day(@StartDate),@StartDate))-1 AS d2
UNION ALL
SELECT  dateadd(month,1,dateadd(day,1-day(d1),d1)), dateadd(month,1,dateadd(day,1-day(d2+1),d2+1))-1
FROM C 
WHERE dateadd(month,2,d1) <= @EndDate
)
SELECT d1 AS StartDate, d2 AS EndDate 
FROM C
UNION ALL
SELECT dateadd(day,1-day(@EndDate),@EndDate), @EndDate

SELECT * FROM dbo.dba_getdate_period('20120616', '20121015')

Результат:
2012-06-16 00:00:00.000 2012-06-30 00:00:00.000
2012-07-01 00:00:00.000 2012-07-31 00:00:00.000
2012-08-01 00:00:00.000 2012-08-31 00:00:00.000
2012-09-01 00:00:00.000 2012-09-30 00:00:00.000
2012-10-01 00:00:00.000 2012-10-15 00:00:00.000

SELECT * FROM dbo.dba_getdate_period('20030316', '20121015')
The statement terminated. The maximum recursion 100 has been exhausted before statement completion.
(база master не доступна)
30 окт 12, 10:10    [13394872]     Ответить | Цитировать Сообщить модератору
 Re: как обойти ограничение CTE, количество рекурсий не более 100 (ms sql 2005)  [new]
Добрый Э - Эх
Guest
OPTION (MAXRECURSION 0)
30 окт 12, 10:14    [13394890]     Ответить | Цитировать Сообщить модератору
 Re: как обойти ограничение CTE, количество рекурсий не более 100 (ms sql 2005)  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
Добрый Э - Эх,

Работает :)
30 окт 12, 10:17    [13394908]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить