sql server - why cte recursive returns just the first row? -
please take @ cte , tell me what's wrong it? returns first row (anchor).
edit: 1 works @ should, wonder what's wrong tables , data!!!
create table menus (menuid uniqueidentifier primary key, menuname nvarchar(100)) create table menuitems (menuitemid uniqueidentifier primary key, pid uniqueidentifier null, menuid uniqueidentifier not null, menuitemname nvarchar(100) not null) insert menus values ('3ab564a7-1d2c-4c43-91e3-a191016cbe67', 'main') insert menuitems values ('d3b92d1b-7afa-4e11-af01-9f6a00b1b2a9', '00000000-0000-0000-0000-000000000000', '3ab564a7-1d2c-4c43-91e3-a191016cbe67', 'books') insert menuitems values ('70575c44-1ef8-497f-b7b8-a18300f645d7', '00000000-0000-0000-0000-000000000000', '3ab564a7-1d2c-4c43-91e3-a191016cbe67', 'cds') insert menuitems values ('2d6ed5b3-4c6a-4907-8571-a196009727d7', '00000000-0000-0000-0000-000000000000', '3ab564a7-1d2c-4c43-91e3-a191016cbe67', 'dvds') insert menuitems values ('3a1096e7-5fd2-4f77-9729-a19600973bdf', '2d6ed5b3-4c6a-4907-8571-a196009727d7', '3ab564a7-1d2c-4c43-91e3-a191016cbe67', 'movies') insert menuitems values ('5c2ac1f8-dee0-448b-b538-a19600f0839b', '00000000-0000-0000-0000-000000000000', '3ab564a7-1d2c-4c43-91e3-a191016cbe67', 'cassetes') go declare @menuid uniqueidentifier set @menuid = '3ab564a7-1d2c-4c43-91e3-a191016cbe67' ;with cte (menuitemid, pid, lvl) ( select menuid menuitemid, cast(null uniqueidentifier) pid, 1 menus menuid = @menuid union select menuitems.menuitemid , pid = case menuitems.pid when '00000000-0000-0000-0000-000000000000' @menuid else menuitems.pid end , cte.lvl + 1 menuitems inner join cte on cte.menuitemid = menuitems.pid menuitems.menuid = @menuid ) select * cte edit: result should this:
3ab564a7-1d2c-4c43-91e3-a191016cbe67 null 1 d3b92d1b-7afa-4e11-af01-9f6a00b1b2a9 3ab564a7-1d2c-4c43-91e3-a191016cbe67 2 70575c44-1ef8-497f-b7b8-a18300f645d7 3ab564a7-1d2c-4c43-91e3-a191016cbe67 2 2d6ed5b3-4c6a-4907-8571-a196009727d7 3ab564a7-1d2c-4c43-91e3-a191016cbe67 2 5c2ac1f8-dee0-448b-b538-a19600f0839b 3ab564a7-1d2c-4c43-91e3-a191016cbe67 2 3a1096e7-5fd2-4f77-9729-a19600973bdf 2d6ed5b3-4c6a-4907-8571-a196009727d7 3 thanks in advance!
kardo
the problem seems in
inner join cte on cte.menuitemid = menuitems.pid because menuitemid , pid not match.
provide table structure , sample data further analysis , simulate problem actually.
Comments
Post a Comment