Подскажите с рекурсией.

Rstud
Дата: 05.06.2011 11:56:25
Рекурсивно выбираю данные из таблицы.
Необходимо на каждом новом уровне рекурсии производить преобразования над значением предыдущего уровня
Т.е. sname[j] = sname[j-1] + '!'

with cte (Name, sname, lev)
as
(
Select t3.name, cast (t3.name as varchar(15)) as sname , 0 as lev
from test3 t3
union all
Select t3.name, cast(( rtrim(c.sname)) +'!' as varchar(15) ), lev+1
from test3 t3 inner join cte c on c.name<>t3.name or c.name=t3.name

)
Select *
from cte
where lev<=3

То что получается и то что хочется получить - во вложении.
Подскажите пожалуйста, как подправить ошибку.
kDnZP
Дата: 05.06.2011 12:40:39
Rstud, необходимы: таблица+тестовые данные, потом можно будет поглядеть.
Rstud
Дата: 05.06.2011 14:10:55
Tаблица "test3", один атрибут "name".
В три заначения:
Иванов
Петров
Смирнов
Pasionario
Дата: 05.06.2011 14:54:09
declare @t table([name] nvarchar(15));

insert @t values('Иванов'), ('Петров'), ('Смирнов');

with cte (n1, n2, l)
as
(
	select [name] n1, [name] n2, 0 l
	from @t
	
	union all
	
	select n1, cast(n2 + '!' as nvarchar(15)), l + 1
	from cte c
	where l < 2
)

select *
from cte
order by l, n1

n1 n2 l
Иванов Иванов 0
Петров Петров 0
Смирнов Смирнов 0
Иванов Иванов! 1
Петров Петров! 1
Смирнов Смирнов! 1
Иванов Иванов!! 2
Петров Петров!! 2
Смирнов Смирнов!! 2
Rstud
Дата: 05.06.2011 15:49:40
Pasionario, cпасибо, ошибку у себя нашел.