Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / [2008 r2] cte в outer apply / 4 сообщений из 4, страница 1 из 1
20.03.2020, 12:13
    #39939477
BlackEric
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[2008 r2] cte в outer apply
Можно как-то использовать запрос с cte в jouter apply? Нужна рекурсивная выборка.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
outer apply
	(
		with
         Docs as
         (
             select
                 th1.RowID,
                 th1.ParentRowID,
	     		th1.UserName,
                 0 as lvl
             from TaskHistory th1 with(nolock)
             where th1.ID = dci.ID and th1.UserID = '123'
             and th1.ParentRowID is not null
             union all
             select
                 th2.RowID,
                 th2.ParentID,
	     		th2.UserName,
                 d.lvl + 1
             from Tasks th2 with(nolock)
             join Docs d on th2.RowID = d.ParentRowID
         )
	select distinct d.RowID
    from Docs d
	inner join ASV_ResolutionTasks rt with(nolock)
	on rt.RowID = d.RowID
	AND rt.ControllerID is not null
	AND rt.ControllerID in
	(
		Select UserID from RoleUsers with(nolock)
		Where ID =
		(
			Select RootControllerID from ASV_SettingsCommonInfo with(nolock)
		)
	)
	) rc



Сообщение 156, уровень 15, состояние 1, строка 245
Incorrect syntax near the keyword 'with'.
...
Рейтинг: 0 / 0
20.03.2020, 12:18
    #39939480
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[2008 r2] cte в outer apply
CTE надо вынести наверх, а в JOIN оставить только внешний запрос.
...
Рейтинг: 0 / 0
20.03.2020, 12:19
    #39939482
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[2008 r2] cte в outer apply
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
; 		with
         Docs as
         (
             select
                 th1.RowID,
                 th1.ParentRowID,
	     		th1.UserName,
                 0 as lvl
             from TaskHistory th1 with(nolock)
             where th1.ID = dci.ID and th1.UserID = '123'
             and th1.ParentRowID is not null
             union all
             select
                 th2.RowID,
                 th2.ParentID,
	     		th2.UserName,
                 d.lvl + 1
             from Tasks th2 with(nolock)
             join Docs d on th2.RowID = d.ParentRowID
         )
select
...
outer apply
	(
	select distinct d.RowID
    from Docs d
	inner join ASV_ResolutionTasks rt with(nolock)
	on rt.RowID = d.RowID
	AND rt.ControllerID is not null
	AND rt.ControllerID in
	(
		Select UserID from RoleUsers with(nolock)
		Where ID =
		(
			Select RootControllerID from ASV_SettingsCommonInfo with(nolock)
		)
	)
	) rc
...
Рейтинг: 0 / 0
20.03.2020, 12:23
    #39939486
msLex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[2008 r2] cte в outer apply
BlackEric,

Нет, рекурсивный CTE, как и CTE в принципе не может быть вложен в другой блок запроса.
Но, можно делать несколько CTE, которые могут ссылаться на ранее объявленные


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
create table #t (id int, parent_id int)

insert #t (
	id
	, parent_id
)
values (1,null), (2,1), (3,1)



;with h as (
	select id, parent_id
	from #t 
	where 
		parent_id is null
	union all
	select t.id, t.parent_id
	from h 
	inner join #t t on h.id = t.parent_id
)
, t as (
	select 
		*
	from h a
	outer apply (
		select str_id = cast(a.id as varchar(10)), str_parent_id = cast(a.parent_id as varchar(10))
	) b
)
select *
from t

drop table #t
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / [2008 r2] cte в outer apply / 4 сообщений из 4, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]