powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / [2008 r2] cte в outer apply
4 сообщений из 4, страница 1 из 1
[2008 r2] cte в outer apply
    #39939477
BlackEric
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно как-то использовать запрос с 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
[2008 r2] cte в outer apply
    #39939480
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CTE надо вынести наверх, а в JOIN оставить только внешний запрос.
...
Рейтинг: 0 / 0
[2008 r2] cte в outer apply
    #39939482
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
[2008 r2] cte в outer apply
    #39939486
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
4 сообщений из 4, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / [2008 r2] cte в outer apply
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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