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

Откуда: Запорожье
Сообщений: 53690
подскажите, куда порыться
declare @v_start_date date = {d '2017-01-01'};
declare @v_end_date date   = {d '2017-01-02'};

with first_tree (vDate)
as
(
    -- Все дни периода через рекурсию
    select cast(cast(@v_start_date as date) as datetime) vDate
    union all
    select dateadd(hour, 12, vDate) vDate
      from first_tree
     where vDate < cast(cast(@v_end_date as date) as datetime)
)
select vDate CalendarDate,
       datename(dw, vDate) DayOfWeekName,
       (datepart(dw, vDate) + @@datefirst - 1) % 7 + 1 day_of_week_number
  from first_tree
  OPTION (MAXRECURSION 10) работает
  ; 

with first_tree (vDate)
as
(
    -- Все дни периода через рекурсию
    select cast(cast(@v_start_date as date) as datetime) vDate
    union all
    select dateadd(hour, 12, vDate) vDate
      from first_tree
     where vDate < cast(cast(@v_end_date as date) as datetime)
),
days_tree as
(
select vDate CalendarDate,
       datename(dw, vDate) DayOfWeekName,
       (datepart(dw, vDate) + @@datefirst - 1) % 7 + 1 day_of_week_number
  from first_tree
  OPTION (MAXRECURSION 10) НЕ работает
  
)
SELECT *
  FROM days_tree;
27 окт 17, 09:30    [20904965]     Ответить | Цитировать Сообщить модератору
 Re: OPTION (MAXRECURSION) не везде работает  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 940
andreymx,
и не будет работать.
а в вашем случае и не нужно - вам нужен SELECT TOP 10 судя по всему.
27 окт 17, 09:41    [20905012]     Ответить | Цитировать Сообщить модератору
 Re: OPTION (MAXRECURSION) не везде работает  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
andreymx,

обратиться в msdn

автор
The following clauses cannot be used in the CTE_query_definition:
ORDER BY (except when a TOP clause is specified)
INTO
OPTION clause with query hints
FOR BROWSE
27 окт 17, 09:45    [20905025]     Ответить | Цитировать Сообщить модератору
 Re: OPTION (MAXRECURSION) не везде работает  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 53690
Руслан Дамирович
andreymx,
и не будет работать.
а в вашем случае и не нужно - вам нужен SELECT TOP 10 судя по всему.
не, мне нужен запрос из нескольких сотен строк

declare @v_start_date date = {d '2017-01-01'};
declare @v_end_date date   = {d '2017-01-06'};


with first_tree (vDate)
as
(
    -- Все дни периода через рекурсию
    select cast(cast(@v_start_date as date) as datetime) vDate
    union all
    select dateadd(hour, 1, vDate) vDate
      from first_tree
     where vDate < cast(cast(@v_end_date as date) as datetime)
),
days_tree as
(
select vDate CalendarDate,
       datename(dw, vDate) DayOfWeekName,
       (datepart(dw, vDate) + @@datefirst - 1) % 7 + 1 day_of_week_number
  from first_tree
  --OPTION (MAXRECURSION 2)
  
)
SELECT *
  FROM days_tree;


The statement terminated. The maximum recursion 100 has been exhausted before statement completion.
27 окт 17, 10:07    [20905111]     Ответить | Цитировать Сообщить модератору
 Re: OPTION (MAXRECURSION) не везде работает  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
что надо-то, вменяемый результат получить
или заставить работать?
если первое, скажите, чего хотите получить.
если второе, опцию воткните в нужное место:
with first_tree (vDate)
as
(
    -- Все дни периода через рекурсию
    select cast(cast(@v_start_date as date) as datetime) vDate
    union all
    select dateadd(hour, 1, vDate) vDate
      from first_tree
     where vDate < cast(cast(@v_end_date as date) as datetime)
),
days_tree as
(
select vDate CalendarDate,
       datename(dw, vDate) DayOfWeekName,
       (datepart(dw, vDate) + @@datefirst - 1) % 7 + 1 day_of_week_number
  from first_tree
  
  
)
SELECT *
  FROM days_tree
  OPTION (MAXRECURSION 10)
27 окт 17, 10:13    [20905140]     Ответить | Цитировать Сообщить модератору
 Re: OPTION (MAXRECURSION) не везде работает  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 53690
Yasha123,

спасибо, работает
что-то в прошлый раз у меня проглючило

удачи
27 окт 17, 10:23    [20905226]     Ответить | Цитировать Сообщить модератору
 Re: OPTION (MAXRECURSION) не везде работает  [new]
iap
Member

Откуда: Москва
Сообщений: 46952
OPTION() пишется для всего запроса, а не внутри определения CTE
27 окт 17, 11:14    [20905523]     Ответить | Цитировать Сообщить модератору
 Re: OPTION (MAXRECURSION) не везде работает  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 53690
iap,

ок, спасибо
27 окт 17, 11:32    [20905611]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить