re

18/05/2009 - 11:39 von Antje Kaiser | Report spam
Hallo zusammen,
ich habe mal wieder einen interessanten Effekt festgestellt, den ich mir
nicht erklàren kann. Kurz zum Hintergrundverstàndnis: In meiner DB gibt es
Produkte (mit P abgekürzt), die mehrere Teilprodukte (TP abgekürzt) haben
können, die wiederum verschiedene Produktionen (Prod abgekürzt) haben können,
die dann mehrere zugehörige Produktionspersonen haben können. Also 4 Tabellen
hierarchisch jeweils 1:N. Eine der 4 Tabellen (die Produktion selbst) brauche
ich jedoch im nachfolgenden SQL nicht, da die ID dazu bereits im Teilprodukt
steht.
Folgendes Stück Code führe ich im MS SQL Server Management Studio des
SQL-Server 2005 aus:

select ProdPName
from PausTP inner join TP on PausTP_TP_ID = TP_ID inner join ProdP on
ProdP_Prod_id = TPaktProdID and ProdP_Funktion = 173
where PausTP_P_ID = 30029
order by TP_ID, ProdP_Reihenfolge

Da speziell zum Produkt 30029 nur ein Teilprodukt mit genau einer aktuellen
Produktion, die genau 3 Produktionspersonen enthàlt, gehört, erhalte ich
folgendes Ergebnis:

Franz
Heinz
Susi

Soweit prima, nun möchte ich aber ein Textfeld zurückbekommen, in etwa so:
FranzHeinzSusi
Und dies natürlich in der Reihenfolge wie sie im Reihenfolgenfeld angegeben
sind. Darum auch oben schon das order by TP_ID, ProdP_Reihenfolge.
Nachfolgender Code

declare @erg nvarchar(500)
set @erg = ''

select @erg = @erg + ProdPName
from PausTP inner join tblteilprodukt on PausTP_TP_ID = TP_ID inner join
tblProdP on ProdP_Prod_id = TPaktProdID and ProdP_Funktion = 173 where
PausTP_P_ID = 30029
order by TP_ID, ProdP_Reihenfolge

select @erg

bringt aber folgendes

Susi

Also nix mit 3 Namen hintereinander. Interessanterweise habe ich gleiches
schon an vielen Stellen gemacht und es funktionierte immer, irgendetwas muß
also an dieser speziellen Konstruktion falsch sein.
Lasse ich die Sortierung nach ProdP_Reihenfolge weg kommt HeinzFranzSusi
raus (nur nicht sortiert) oder ich gebe top und >= 3 (in diesem Fall) an,
dann geht es auch mit der Sortierung. Top 100 Percent geht aber nicht. Dann
kommt wieder nur der letzte Name raus. Da ich auf die Sortierung nicht
verzichten kann, im vorhinein aber nicht weiß wieviele Zeilen herauskommen
und man ja (nachdem was ich gelesen habe) sowieso nicht einfach so mit top
... sein Problem lösen soll, will ich hauptsàchlich erst einmal verstehen,
was hier schief ist. Wie gesagt ich habe àhnliches schon an vielen Stellen
gemacht und bin nun etwas verunsichert, wo es vielleicht noch überall nicht
funktionieren könnte.
Fàllt Euch dazu etwas ein? Was kann ich tun?
Schon mal danke für Eure Mühe

Gruß
Antje
 

Lesen sie die antworten

#1 Antje Kaiser
18/05/2009 - 11:49 | Warnen spam
sorry, sorry, sorry, nun hab ich in meiner ganzen Problembeschreibung
vergessen ein sinnvolles Subject anzugeben. Dies hier halt nachtràglich, auch
wenns natürlich nun nichts mehr hilft. :-(

Gruß
Antje


"Antje Kaiser" wrote:

Hallo zusammen,
ich habe mal wieder einen interessanten Effekt festgestellt, den ich mir
nicht erklàren kann. Kurz zum Hintergrundverstàndnis: In meiner DB gibt es
Produkte (mit P abgekürzt), die mehrere Teilprodukte (TP abgekürzt) haben
können, die wiederum verschiedene Produktionen (Prod abgekürzt) haben können,
die dann mehrere zugehörige Produktionspersonen haben können. Also 4 Tabellen
hierarchisch jeweils 1:N. Eine der 4 Tabellen (die Produktion selbst) brauche
ich jedoch im nachfolgenden SQL nicht, da die ID dazu bereits im Teilprodukt
steht.
Folgendes Stück Code führe ich im MS SQL Server Management Studio des
SQL-Server 2005 aus:

select ProdPName
from PausTP inner join TP on PausTP_TP_ID = TP_ID inner join ProdP on
ProdP_Prod_id = TPaktProdID and ProdP_Funktion = 173
where PausTP_P_ID = 30029
order by TP_ID, ProdP_Reihenfolge

Da speziell zum Produkt 30029 nur ein Teilprodukt mit genau einer aktuellen
Produktion, die genau 3 Produktionspersonen enthàlt, gehört, erhalte ich
folgendes Ergebnis:

Franz
Heinz
Susi

Soweit prima, nun möchte ich aber ein Textfeld zurückbekommen, in etwa so:
FranzHeinzSusi
Und dies natürlich in der Reihenfolge wie sie im Reihenfolgenfeld angegeben
sind. Darum auch oben schon das order by TP_ID, ProdP_Reihenfolge.
Nachfolgender Code

declare @erg nvarchar(500)
set @erg = ''

select @erg = @erg + ProdPName
from PausTP inner join tblteilprodukt on PausTP_TP_ID = TP_ID inner join
tblProdP on ProdP_Prod_id = TPaktProdID and ProdP_Funktion = 173 where
PausTP_P_ID = 30029
order by TP_ID, ProdP_Reihenfolge

select @erg

bringt aber folgendes

Susi

Also nix mit 3 Namen hintereinander. Interessanterweise habe ich gleiches
schon an vielen Stellen gemacht und es funktionierte immer, irgendetwas muß
also an dieser speziellen Konstruktion falsch sein.
Lasse ich die Sortierung nach ProdP_Reihenfolge weg kommt HeinzFranzSusi
raus (nur nicht sortiert) oder ich gebe top und >= 3 (in diesem Fall) an,
dann geht es auch mit der Sortierung. Top 100 Percent geht aber nicht. Dann
kommt wieder nur der letzte Name raus. Da ich auf die Sortierung nicht
verzichten kann, im vorhinein aber nicht weiß wieviele Zeilen herauskommen
und man ja (nachdem was ich gelesen habe) sowieso nicht einfach so mit top
... sein Problem lösen soll, will ich hauptsàchlich erst einmal verstehen,
was hier schief ist. Wie gesagt ich habe àhnliches schon an vielen Stellen
gemacht und bin nun etwas verunsichert, wo es vielleicht noch überall nicht
funktionieren könnte.
Fàllt Euch dazu etwas ein? Was kann ich tun?
Schon mal danke für Eure Mühe

Gruß
Antje

Ähnliche fragen