У меня есть таблица, которая содержит идентификаторы объектов и идентификаторов их родителей. Он используется для хранения объектов данных, представленных в виде дерева. Я хочу запросить таблицу для создания полного пути к объекту в дереве. Максимальная глубина дерева, вероятно, никогда не выйдет за пределы 20 объектов. Есть ли способ сделать это без цикла while ... или стоит попытаться избежать цикла while для этого типа/размера работы.Избегание цикла while в SQL Server
таблица выглядит следующим образом:
CREATE TABLE [dbo].[tblObj] ( [ObjectId] [int] NOT NULL, [ObjectName] [nvarchar](50) NOT NULL, [ParentId] [int] NULL, )
с данными, как этот
insert into tblObj (ObjectId, ObjectName) values (1, 'Root') insert into tblObj (ObjectId, ObjectName, ParentId) values (2, 'Middle1', 1) insert into tblObj (ObjectId, ObjectName, ParentId) values (3, 'Middle2', 2) insert into tblObj (ObjectId, ObjectName, ParentId) values (4, 'Leaf', 3)
желаемого результата использовать объект/родительские отношения, чтобы создать строку с именами объектов, которые отражают полный путь. Приведенные выше данные приведут к пути «Root \ Middle1 \ Middle2 \ Leaf»
Пример ожидаемых результатов? В любом случае, вам, вероятно, нужен рекурсивный CTE. –