ich another question erforschte, wenn ich dieses Verhalten in SQL Server-Hit 2005. Diese Abfrage die maximale Rekursion erschöpfen würde:Unterschiedliches Ergebnis mit * und expliziter Feldliste?
with foo(parent_id,child_id) as (
select parent_id,child_id
from #bar where parent_id in (1,3)
union all
select #bar.* -- Line that changed
from #bar
join foo on #bar.parent_id = foo.child_id
)
select * from foo
Aber das würde funktionieren:
inwith foo(parent_id,child_id) as (
select parent_id,child_id
from #bar where parent_id in (1,3)
union all
select #bar.parent_id, #bar.child_id -- Line that changed
from #bar
join foo on #bar.parent_id = foo.child_id
)
select * from foo
Ist das ein Bug SQL-Server, oder übersehe ich etwas?
Hier ist die Tabellendefinition:
if object_id('tempdb..#bar') is not null
drop table #bar
create table #bar (
child_id int,
parent_id int
)
insert into #bar (parent_id,child_id) values (1,2)
insert into #bar (parent_id,child_id) values (1,5)
insert into #bar (parent_id,child_id) values (2,3)
insert into #bar (parent_id,child_id) values (2,6)
insert into #bar (parent_id,child_id) values (6,4)
+1 - Wählen Sie * sollte NUR immer für Quickie Ad-hoc-Abfragen verwendet werden, aber niemals nie in einem Produktionssystem. Ich stimme vollkommen zu! –
Cool, danke, ich blieb stecken und dachte über die Rekursion nach. – Andomar