Stückliste

10/06/2008 - 12:25 von lange.patrick | Report spam
Hallo Zusammen,

ich habe folgenden SQL Code, der mir eine Stückliste ausgeben soll.
Meine Schlüssel sind aber Strings.
Deshalb funktioniert dieser Programmcode nicht Richtig.

Wer kann mir helfen?
Bekomme die Fehlermeldung:
Meldung 530, Ebene 16, Status 1, Zeile 4
Die Anweisung wurde beendet. Die maximale Rekursionstiefe 100 wurde
vor Abschluss der Anweisung erreicht.

Obwohl nur zwei Ebenen da sein sollten.

Danke für Eure Hilfe
Gruß
Patrick

declare @Kassennummer varchar(max)
set @Kassennummer = '011014000'

;with kassenHierarchieDown as
(
select 1 Row,Kassennummer,Kassenname,Kassennummer_Mutterkasse
,cast(Kassennummer as varchar(max)) Pfad
from Kasse
where Kassennummer_Mutterkasse is NULL
union all
select Row + 1
Row,K.Kassennummer,K.Kassenname,K.Kassennummer_Mutterkasse
,H.Pfad + '-' + cast(K.Kassennummer as varchar(max))
from Kasse K
inner join kassenHierarchieDown H
on
K.Kassennummer_Mutterkasse = H.Kassennummer
),
kassenHierarchieUp as
(
select
0 Row
,Kassennummer
,Kassenname
,Kassennummer_Mutterkasse
,cast(Kassennummer as varchar(max)) Pfad
from Kasse
where
Kassennummer = @Kassennummer
union all
select
Row - 1 Row
,K.Kassennummer
,K.Kassenname
,K.Kassennummer_Mutterkasse
,H.Pfad + '-' + cast(K.Kassennummer as varchar(max))
from Kasse K
inner join kassenHierarchieUp H
on
H.Kassennummer_Mutterkasse = K.Kassennummer
),
kassenHierarchieMerge as
(
select
Row
,Kassennummer
,Kassenname
,Kassennummer_Mutterkasse
,Pfad
,1 Ebene
from kassenHierarchieUp
where
Kassennummer <> @Kassennummer
union all
select top 50
Row
,Kassennummer
,Kassenname
,Kassennummer_Mutterkasse
,Pfad
,2 Ebene
from kassenHierarchieDown
where
Pfad like '%' + cast(@Kassennummer as varchar(max)) +
'%'
)
select
Kassennummer
,Kassenname
,Kassennummer_Mutterkasse
,Pfad
from kassenHierarchieMerge
order by Ebene,Row
 

Lesen sie die antworten

#1 Elmar Boye
10/06/2008 - 13:37 | Warnen spam
Hallo Patrick,

schrieb:
ich habe folgenden SQL Code, der mir eine Stückliste ausgeben soll.
Meine Schlüssel sind aber Strings.
Deshalb funktioniert dieser Programmcode nicht Richtig.



Zeichenkette oder nicht sollte nicht das Problem sein.
Für den Pfad unten kannst Du ggf. eine weitere Maske verwenden,
z. B. würe QUOTENAME(Kassennummer) die Werte in [Klammern] setzen,
wodurch mit das LIKE pràziser formuliert werden könnte.

Wer kann mir helfen?



Hàttest Du mal die Tabellenstruktur sowie ein paar Testdaten?
Wenn ich "richtige" Daten vorgebe, kommt es zu keinem Fehler...
Die von mir verwendete Teilstruktur habe ich unten drangehàngt,
da wàre ein paar Daten zum Fehler reprodzieren schön.

Bekomme die Fehlermeldung:
Meldung 530, Ebene 16, Status 1, Zeile 4
Die Anweisung wurde beendet. Die maximale Rekursionstiefe 100 wurde
vor Abschluss der Anweisung erreicht.



Das weist üblicherweise auf doppelte Daten in den Verweisen hin.

kassenHierarchieMerge as



Wozu soll das Merge am Ende dienen?

Gruß Elmar


CREATE TABLE dbo.Kasse
(
Kassennummer varchar(20) NOT NULL,
Kassennummer_Mutterkasse varchar(20) NULL,

Kassenname AS ('Name: ' + Kassennummer)
)

CREATE TABLE dbo.KassenHierarchieDown
(
Kassennummer varchar(20) NOT NULL,
Kassennummer_Mutterkasse varchar(20) NULL
)
GO

INSERT INTO dbo.Kasse (Kassennummer, Kassennummer_Mutterkasse)
VALUES ('011014000', '110000000')
INSERT INTO dbo.Kasse (Kassennummer, Kassennummer_Mutterkasse)
VALUES ('110000000', '100000000')
INSERT INTO dbo.Kasse (Kassennummer, Kassennummer_Mutterkasse)
VALUES ('100000000', NULL)
GO

INSERT INTO dbo.KassenHierarchieDown (Kassennummer, Kassennummer_Mutterkasse)
VALUES ('011014000', '110000000')
INSERT INTO dbo.KassenHierarchieDown (Kassennummer, Kassennummer_Mutterkasse)
VALUES ('110000000', '100000000')
INSERT INTO dbo.KassenHierarchieDown (Kassennummer, Kassennummer_Mutterkasse)
VALUES ('100000000', NULL)
GO

Ähnliche fragen