Преобразование CTE в временную таблицу в SQL, чтобы получить все возможные родители
У меня есть одна пользовательская таблица, в которой я поддерживаю отношения родитель-потомок, и я хочу сгенерировать результат со всеми идентификаторами пользователя вместе с его parentid и всеми возможными иерархическими родителями в виде разделенных комами строк, моя структура таблицы выглядит следующим образом.
CREATE TABLE [hybarmoney].[Users]( [ID] [bigint] IDENTITY(1,1) NOT NULL, [USERID] [nvarchar](100) NULL, [REFERENCEID] [bigint] NULL )
и я получаю результат, используя приведенный ниже CTE
;WITH Hierarchy ( ChildId ,ChildName ,ParentId ,Parents ) AS ( SELECT Id ,USERID ,REFERENCEID ,CAST('' AS VARCHAR(MAX)) FROM hybarmoney.Users AS FirtGeneration WHERE REFERENCEID = 0 UNION ALL SELECT NextGeneration.ID ,NextGeneration.UserID ,Parent.ChildId ,CAST(CASE WHEN Parent.Parents = '' THEN (CAST(NextGeneration.REFERENCEID AS VARCHAR(MAX))) ELSE (Parent.Parents + ',' + CAST(NextGeneration.REFERENCEID AS VARCHAR(MAX))) END AS VARCHAR(MAX)) FROM hybarmoney.Users AS NextGeneration INNER JOIN Hierarchy AS Parent ON NextGeneration.REFERENCEID = Parent.ChildId ) SELECT * FROM Hierarchy ORDER BY ChildId OPTION (MAXRECURSION 0)
Но у меня есть ограничение MAXRECURSION, и когда я погуглил, я узнал, что временные таблицы-это альтернативное решение, но я не смог сделать то же самое, а также я не хочу получать все возможные верхние родители, для моей цели я хочу найти 15 уровней иерархических родителей для каждого пользователя. Можно ли использовать временные таблицы для моей цели, если это возможно, как.
Что я уже пробовал:
Я пробовал использовать только CTE, как уже упоминалось выше
Maciej Los
Вы можете отбросить результат CTE во временную таблицу с помощью инструкции SELECT INTO.
Что за проблема у вас возникла? "У меня есть ограничение MAXRECURSION" вообще не является описательным.