Сохранение результата рекурсивного запроса T / SQL обратно в таблицу - PullRequest
2 голосов
/ 01 апреля 2012

Я использую T / SQL в SQL Server 2008

У меня есть таблица MyTable со следующими столбцами:

 CHILD
 PARENT
 HIERARCHY 

В настоящее время столбец HIERARCHY пуст, но я хотел бызаполните его.

У меня есть некоторый код, который создает идентификатор иерархии (адаптированный из кода в Рекурсивные дочерние / родительские запросы в T / SQL ). Этот код работает очень хорошо.

with n(CHILD, PARENT, GENERATION, hierarchy) as (
select CHILD, PARENT,0, CAST(CHILD as nvarchar) as GENERATION from MyTable
where PARENT=1 
union all
select nplus1.CHILD, nplus1.PARENT, GENERATION+1, 
cast(n.hierarchy + '/' + CAST(nplus1.CHILD as nvarchar) as  nvarchar)
 from 
MyTable nplus1 inner join n on nplus1.PARENT=n.CHILD and    
)

Я могу увидеть результаты этого запроса, выполнив:

select CHILD,GENERATION,Hierarchy from n

Однако я хотел бы вернуть результат в столбец Hierarchy в MyTable.Этот код не работает!

update MyTable e
set HIERARCHY='/'+(select hierarchy from n where n.CHILD=e.CHILD)

Кто-нибудь знает, как это сделать?Спасибо!

1 Ответ

4 голосов
/ 01 апреля 2012

Может быть, что-то вроде этого:

;with n(CHILD, PARENT, GENERATION, hierarchy) as (
select CHILD, PARENT,0, CAST(CHILD as nvarchar) as GENERATION from MyTable
where PARENT=1 
union all
select nplus1.CHILD, nplus1.PARENT, GENERATION+1, 
cast(n.hierarchy + '/' + CAST(nplus1.CHILD as nvarchar) as  nvarchar)
 from 
MyTable nplus1 inner join n on nplus1.PARENT=n.CHILD and    
)
UPDATE MyTable 
   SET Hierarchy=n.hierarchy
FROM MyTable 
JOIN n
  ON n.CHILD=MyTable.CHILD

Редактировать

Ты имеешь в виду, как это:

;with n(CHILD, PARENT, GENERATION, hierarchy) as (
select CHILD, PARENT,0, CAST(CHILD as nvarchar) as GENERATION from MyTable
where PARENT=1 
union all
select nplus1.CHILD, nplus1.PARENT, GENERATION+1, 
cast(n.hierarchy + '/' + CAST(nplus1.CHILD as nvarchar) as  nvarchar)
 from 
MyTable nplus1 inner join n on nplus1.PARENT=n.CHILD and    
)
UPDATE MyTable 
SET Hierarchy='/'+n.hierarchy+'/' 
FROM MyTable e 
JOIN n ON n.child=e.child
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...