powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как узнать, на для какого id происходит превышение максимальной глубины рекурсии?
4 сообщений из 4, страница 1 из 1
Как узнать, на для какого id происходит превышение максимальной глубины рекурсии?
    #40020062
Здравствуйте!

Есть табличная функция с использованием рекурсивного 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.
ALTER FUNCTION [mrsk].[check_sub_docs](	@doc_link int
)
RETURNS @docs TABLE(
	whose INT
	, LINK INT
	, doc_type INT
	, contract_status INT
	, level INT
) AS
BEGIN
	;WITH Childs(whose, LINK, doc_type, contract_status, Level) as (
		SELECT
			d.link, d.link, d.F_Docum_Types, d.F_Contract_Status, 1
		FROM dbo.DD_Docs d
		WHERE
			LINK = @doc_link
		UNION ALL
		SELECT
			c.whose, d.link, d.F_Docum_Types, d.F_Contract_Status, c.Level + 1
		FROM dbo.DD_Docs d
		JOIN Childs c ON c.whose = d.F_Docs
	)
	INSERT INTO @docs
	SELECT * FROM Childs
	OPTION (MAXRECURSION 777);
	RETURN
END


Для какого-то @doc_link происходит превышении максимально допустимой глубины рекурсии, возникает ошибка для нижеследующего запроса:
Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT
	TP_LINK
	, CASE WHEN 
		EXISTS( SELECT 1 FROM mrsk.check_sub_docs(DD_LINK) WHERE doc_type = @DST_Route_List_Invent AND contract_status NOT IN( @CS_Done, @DCS_Cancelled_Out) )
			THEN 1 ELSE 0 
	END not_finished
FROM #temp



Как можно узнать, для какого @doc_link(DD_LINK) это происходит?

желаю Вам счастья
...
Рейтинг: 0 / 0
Как узнать, на для какого id происходит превышение максимальной глубины рекурсии?
    #40020074
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Борис Гаркун,

повысить порог рекурсии больше допустимого и выводить строки у которых Level > 777
...
Рейтинг: 0 / 0
Как узнать, на для какого id происходит превышение максимальной глубины рекурсии?
    #40020084
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
felix_ff
Борис Гаркун,

повысить порог рекурсии больше допустимого и выводить строки у которых Level > 777
Там, небось, бесконечная рекурсия.
Лучше в рекурсии прописать WHERE Level<778 и
Код: sql
1.
SELECT TOP(1) WITH TIES * FROM Childs ORDER BY Level DESC
...
Рейтинг: 0 / 0
Как узнать, на для какого id происходит превышение максимальной глубины рекурсии?
    #40020289
Здравствуйте! Спасибо.
Да я похоже ошибся в рекурсии. Вот так заработало:
Код: 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.
ALTER FUNCTION [mrsk].[check_sub_docs](	@doc_link int
)
RETURNS @docs TABLE(
	whose INT
	, LINK INT
	, doc_type INT
	, contract_status INT
	, level INT
) AS
BEGIN
	;WITH Childs(whose, LINK, doc_type, contract_status, Level) as (
		SELECT
			d.link, d.link, d.F_Docum_Types, d.F_Contract_Status, 1
		FROM dbo.DD_Docs d
		WHERE
			LINK = @doc_link
		UNION ALL
		SELECT
			c.whose, d.link, d.F_Docum_Types, d.F_Contract_Status, c.Level + 1
		FROM dbo.DD_Docs d
		JOIN Childs c ON c.LINK = d.F_Docs
	)
	INSERT INTO @docs
	SELECT * FROM Childs
	OPTION (MAXRECURSION 777);
	RETURN
END
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как узнать, на для какого id происходит превышение максимальной глубины рекурсии?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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