Brodi87 Geschrieben 10. Dezember 2010 Teilen Geschrieben 10. Dezember 2010 Hallo, ich hab mal wieder ein problemchen. Ich habe eine Proc geschrieben die mir folgendes ausgibt. Wie Ihr seht kommt eine (Klammer)-Fehlermeldung die ich mir nicht erklären kann, denn wenn ich diese Ausgabe in eine neue Abfrage kopier...funktioniert sie...hab ich ein Brett vor dem kopf? Meldung 102, Ebene 15, Status 1, Zeile 31 Falsche Syntax in der Nähe von 'all'. select Artikel_Typ, Artikel_Kategorie_ID, Hersteller_ID, Artikel_Artikelnr, Artikel_Menge, Artikel_Preis, Artikel_Preis1, Artikel_Preis2, Artikel_Preis3, Artikel_Preis4, Artikel_Gewicht, Artikel_Status, Artikel_Steuersatz, Artikel_Bilddatei, Artikel_EAN, Artikel_Lieferstatus, Artikel_Startseite, SkipImages, Artikel_Bezeichnung, Artikel_Text, Artikel_Kurztext, Artikel_TextLanguage, Artikel_MetaTitle, Artikel_MetaDescription, Artikel_MetaKeywords, Artikel_URL, Aktiv, Attribute_Set, Artikel_Variante_Von, Merkmal, Auspraegung, Menge199 from ( SELECT DISTINCT 'simple' AS Artikel_Typ, em.Freifeld4 AS Artikel_Kategorie_ID, '' AS Hersteller_ID, p._ARTIKELNUMMERMDT AS Artikel_Artikelnr, CASE WHEN (SUM(LP.Bestand)) IS NULL THEN '0' ELSE (SUM(LP.Bestand)) END AS Artikel_Menge, vk.Preis AS Artikel_Preis, vk.Preis * 1.00 AS Artikel_Preis1, vk.Preis * 1.00 AS Artikel_Preis2, vk.Preis * 1.00 AS Artikel_Preis3, vk.Preis * 1.00 AS Artikel_Preis4, p.Gewicht AS Artikel_Gewicht, 4 AS Artikel_Status, CASE p.SSVERKAUF WHEN '2' THEN '6' WHEN '3' THEN '5' ELSE '6' END AS Artikel_Steuersatz, p.Artikelnummer + '.jpg' AS Artikel_Bilddatei, p.EANNummer AS Artikel_EAN, '1' AS Artikel_Lieferstatus, '' AS Artikel_Startseite, 'false' AS SkipImages, p.Bezeichnung AS Artikel_Bezeichnung, CONVERT(varchar(MAX), em.Langtext) AS Artikel_Text, CONVERT(varchar(MAX), em.Langtext2) AS Artikel_Kurztext, '1' AS Artikel_TextLanguage, p.Bezeichnung AS Artikel_MetaTitle, CONVERT(varchar(MAX), em.Langtext2) AS Artikel_MetaDescription, p.Bezeichnung AS Artikel_MetaKeywords, p.Bezeichnung AS Artikel_URL, p.ShopAktiv AS Aktiv, '4' AS Attribute_Set, '' AS Artikel_Variante_Von, 'artikelnummer@is_new' AS 'Merkmal', p.Artikelnummer + '@' + CONVERT(varchar(1), em.Flag3) AS 'Auspraegung', vk.Menge as Menge199 FROM ART AS p INNER JOIN ARPREIS AS vk ON p.Artikelnummer = vk.Artikelnummer LEFT OUTER JOIN lagerp AS LP ON p.Artikelnummer = LP.Artikelnummer INNER JOIN ECOMART AS em ON p.Artikelnummer = em.Artikelnummer WHERE (p.ShopAktiv = '1') AND (p._ARTIKELNUMMERMDT = 'pb0013') and vk.ARPReis_ID = '199' GROUP BY p.Artikelnummer, p.Matchcode, p.Bezeichnung, p._ARTIKELNUMMERMDT, vk.Preis, p.Gewicht, p.EANNummer, em.Freifeld4, CONVERT(varchar(MAX), em.Langtext), CONVERT(varchar(MAX), em.Langtext2), p.ShopAktiv, em.Flag3, p.SSVerkauf, vk.Menge union all Meldung 102, Ebene 15, Status 1, Zeile 25 Falsche Syntax in der Nähe von ')'. SELECT DISTINCT 'simple' AS Artikel_Typ, em.Freifeld4 AS Artikel_Kategorie_ID, '' AS Hersteller_ID, p._ARTIKELNUMMERMDT AS Artikel_Artikelnr, CASE WHEN (SUM(LP.Bestand)) IS NULL THEN '0' ELSE (SUM(LP.Bestand)) END AS Artikel_Menge, vk.Preis AS Artikel_Preis, vk.Preis * 1.00 AS Artikel_Preis1, vk.Preis * 1.00 AS Artikel_Preis2, vk.Preis * 1.00 AS Artikel_Preis3, vk.Preis * 1.00 AS Artikel_Preis4, p.Gewicht AS Artikel_Gewicht, 4 AS Artikel_Status, CASE p.SSVERKAUF WHEN '2' THEN '6' WHEN '3' THEN '5' ELSE '6' END AS Artikel_Steuersatz, p.Artikelnummer + '.jpg' AS Artikel_Bilddatei, p.EANNummer AS Artikel_EAN, '1' AS Artikel_Lieferstatus, '' AS Artikel_Startseite, 'false' AS SkipImages, p.Bezeichnung AS Artikel_Bezeichnung, CONVERT(varchar(MAX), em.Langtext) AS Artikel_Text, CONVERT(varchar(MAX), em.Langtext2) AS Artikel_Kurztext, '1' AS Artikel_TextLanguage, p.Bezeichnung AS Artikel_MetaTitle, CONVERT(varchar(MAX), em.Langtext2) AS Artikel_MetaDescription, p.Bezeichnung AS Artikel_MetaKeywords, p.Bezeichnung AS Artikel_URL, p.ShopAktiv AS Aktiv, '4' AS Attribute_Set, '' AS Artikel_Variante_Von, 'artikelnummer@is_new' AS 'Merkmal', p.Artikelnummer + '@' + CONVERT(varchar(1), em.Flag3) AS 'Auspraegung', vk.Menge as Menge200 FROM ART AS p INNER JOIN ARPREIS AS vk ON p.Artikelnummer = vk.Artikelnummer LEFT OUTER JOIN lagerp AS LP ON p.Artikelnummer = LP.Artikelnummer INNER JOIN ECOMART AS em ON p.Artikelnummer = em.Artikelnummer WHERE (p.ShopAktiv = '1') AND (p._ARTIKELNUMMERMDT = 'pb0013') and vk.ARPReis_ID = '200' GROUP BY p.Artikelnummer, p.Matchcode, p.Bezeichnung, p._ARTIKELNUMMERMDT, vk.Preis, p.Gewicht, p.EANNummer, em.Freifeld4, CONVERT(varchar(MAX), em.Langtext), CONVERT(varchar(MAX), em.Langtext2), p.ShopAktiv, em.Flag3, p.SSVerkauf, vk.Menge ) as UN Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Goos Geschrieben 10. Dezember 2010 Teilen Geschrieben 10. Dezember 2010 Hi Brodi87, ich kann dir nicht wirklich folgen. Wieso schreibst du von einer Fehlermeldung, postest im Anschluss aber zwei Stück und davon dann die eine auch noch mitten in dein Satement rein? Versuch doch dein Problem nochmal etwas präziser zu erläutern. Goos Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Brodi87 Geschrieben 10. Dezember 2010 Autor Teilen Geschrieben 10. Dezember 2010 weil es die Ausgabe (print), wie ich ja geschrieben habe, meiner Proc ist. und da generiert es folglich den Fehler zwischen die Statements. Vielleicht sieht ja jemand den vielleicht simplen Fehler auf Anhieb, ansonsten poste ich auch nochmal das eigentliche Skript. Aber da prophezei ich jetzt schon das niemand eine Fehleranalyse machen möchte! MS SQL 2005 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Goos Geschrieben 10. Dezember 2010 Teilen Geschrieben 10. Dezember 2010 Ach das ist wirklich nur das, was deine Prozedur per print ausgibt und nun soll man raten was in der Prozedur falsch läuft? Ist das in etwa sowas wie: Das Ergebnis lautet 42, wie war die Aufgabenstellung und welche Intention hatte der Autor? Goos PS: ..oder hab ichs schon wieder nicht verstanden? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Brodi87 Geschrieben 10. Dezember 2010 Autor Teilen Geschrieben 10. Dezember 2010 na gut...du wolltest es nicht anders... --declare die Artikel_ID DECLARE @ID varchar(4) set @ID = (SELECT min(vk.ARPReis_ID) as ID FROM ART AS p INNER JOIN ARPREIS AS vk ON p.Artikelnummer = vk.Artikelnummer WHERE (p._ARTIKELNUMMERMDT = 'pb0013')) WHILE @ID <= (SELECT max(vk.ARPReis_ID) as ID FROM ART AS p INNER JOIN ARPREIS AS vk ON p.Artikelnummer = vk.Artikelnummer WHERE (p._ARTIKELNUMMERMDT = 'pb0013')) BEGIN --deklariert den Hauptselect declare @SELECT varchar(max) if @ID = (SELECT min(vk.ARPReis_ID) as ID FROM ART AS p INNER JOIN ARPREIS AS vk ON p.Artikelnummer = vk.Artikelnummer WHERE (p._ARTIKELNUMMERMDT = 'pb0013')) set @Select = 'select Artikel_Typ, Artikel_Kategorie_ID, Hersteller_ID, Artikel_Artikelnr, Artikel_Menge, Artikel_Preis, Artikel_Preis1, Artikel_Preis2, Artikel_Preis3, Artikel_Preis4, Artikel_Gewicht, Artikel_Status, Artikel_Steuersatz, Artikel_Bilddatei, Artikel_EAN, Artikel_Lieferstatus, Artikel_Startseite, SkipImages, Artikel_Bezeichnung, Artikel_Text, Artikel_Kurztext, Artikel_TextLanguage, Artikel_MetaTitle, Artikel_MetaDescription, Artikel_MetaKeywords, Artikel_URL, Aktiv, Attribute_Set, Artikel_Variante_Von, Merkmal, Auspraegung, Menge'+@ID+' from (' else set @Select = '' --deklariert die Bezeichnung der Sub-Selects declare @UN varchar(10) if @ID = (SELECT max(vk.ARPReis_ID) as ID FROM ART AS p INNER JOIN ARPREIS AS vk ON p.Artikelnummer = vk.Artikelnummer WHERE (p._ARTIKELNUMMERMDT = 'pb0013')) set @UN = ' ) as UN' else set @UN = '' --deklariert die Verbindung der Sub-Selects declare @union varchar(15) if @ID = (SELECT max(vk.ARPReis_ID) as ID FROM ART AS p INNER JOIN ARPREIS AS vk ON p.Artikelnummer = vk.Artikelnummer WHERE (p._ARTIKELNUMMERMDT = 'pb0013')) set @union = '' else set @union = 'union all' --die eigentlichen Sub_Selects DECLARE @sql varchar(max) set @sql = ' '+@select+' SELECT DISTINCT ''simple'' AS Artikel_Typ, em.Freifeld4 AS Artikel_Kategorie_ID, '''' AS Hersteller_ID, p._ARTIKELNUMMERMDT AS Artikel_Artikelnr, CASE WHEN (SUM(LP.Bestand)) IS NULL THEN ''0'' ELSE (SUM(LP.Bestand)) END AS Artikel_Menge, vk.Preis AS Artikel_Preis, vk.Preis * 1.00 AS Artikel_Preis1, vk.Preis * 1.00 AS Artikel_Preis2, vk.Preis * 1.00 AS Artikel_Preis3, vk.Preis * 1.00 AS Artikel_Preis4, p.Gewicht AS Artikel_Gewicht, 4 AS Artikel_Status, CASE p.SSVERKAUF WHEN ''2'' THEN ''6'' WHEN ''3'' THEN ''5'' ELSE ''6'' END AS Artikel_Steuersatz, p.Artikelnummer + ''.jpg'' AS Artikel_Bilddatei, p.EANNummer AS Artikel_EAN, ''1'' AS Artikel_Lieferstatus, '''' AS Artikel_Startseite, ''false'' AS SkipImages, p.Bezeichnung AS Artikel_Bezeichnung, CONVERT(varchar(MAX), em.Langtext) AS Artikel_Text, CONVERT(varchar(MAX), em.Langtext2) AS Artikel_Kurztext, ''1'' AS Artikel_TextLanguage, p.Bezeichnung AS Artikel_MetaTitle, CONVERT(varchar(MAX), em.Langtext2) AS Artikel_MetaDescription, p.Bezeichnung AS Artikel_MetaKeywords, p.Bezeichnung AS Artikel_URL, p.ShopAktiv AS Aktiv, ''4'' AS Attribute_Set, '''' AS Artikel_Variante_Von, ''artikelnummer@is_new'' AS ''Merkmal'', p.Artikelnummer + ''@'' + CONVERT(varchar(1), em.Flag3) AS ''Auspraegung'', vk.Menge as Menge'+@ID+' FROM ART AS p INNER JOIN ARPREIS AS vk ON p.Artikelnummer = vk.Artikelnummer LEFT OUTER JOIN lagerp AS LP ON p.Artikelnummer = LP.Artikelnummer INNER JOIN ECOMART AS em ON p.Artikelnummer = em.Artikelnummer WHERE (p.ShopAktiv = ''1'') AND (p._ARTIKELNUMMERMDT = ''pb0013'') and vk.ARPReis_ID = '''+@ID+''' GROUP BY p.Artikelnummer, p.Matchcode, p.Bezeichnung, p._ARTIKELNUMMERMDT, vk.Preis, p.Gewicht, p.EANNummer, em.Freifeld4, CONVERT(varchar(MAX), em.Langtext), CONVERT(varchar(MAX), em.Langtext2), p.ShopAktiv, em.Flag3, p.SSVerkauf, vk.Menge '+@union+''+@UN+' ' EXEC (@sql) print (@sql) set @ID = @ID +1 END Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Goos Geschrieben 10. Dezember 2010 Teilen Geschrieben 10. Dezember 2010 Ok, ich habs begriffen. Ich weiss aber nicht was du eigentlich machen wolltest Es ist in jedem Fall problematisch, wenn dein "declare @SELECT varchar(max)" innerhalb deiner While-Schleife in jedem Durchlauf neu angelegt wird. Ich vermute, dass du das nicht so vorhattest. Goos Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Brodi87 Geschrieben 13. Dezember 2010 Autor Teilen Geschrieben 13. Dezember 2010 ja und nein das ganze soll ja nur das grundgerüst für etwas komplexeres sein. Zumind. war das meine idee an so etwas heran zugehen. vielleicht bring ich aber mal mein Problem etwas näher: Wir haben Artikel, diese haben Preisstaffeln: sprich bestellst du 1 zahlst du 2, ab 3 bezahlst du nur noch 1. (Dies ist auch in einer Preisstaffel-Tabelle hinterlegt) Problem ist das diese Preisstaffeln in einem einzigen Feld untergebracht werden muss (bitte nich fragen warum, ist noch komplexer ) z.B. "Preis1@Menge1@Preis2@Menge3" (Sodass kein Artikel doppelt aufgeführt werden muss.) Für jeden Artikel gibt es aber eine undefinierte Anzahl von Preisstaffeln. Das ganze soll für alle Artikel in einer Abfrage ausgegeben werden. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Toothrot Geschrieben 13. Dezember 2010 Teilen Geschrieben 13. Dezember 2010 Problem ist das diese Preisstaffeln in einem einzigen Feld untergebracht werden muss (bitte nich fragen warum, ist noch komplexer ) z.B. "Preis1@Menge1@Preis2@Menge3" (Sodass kein Artikel doppelt aufgeführt werden muss.) Für jeden Artikel gibt es aber eine undefinierte Anzahl von Preisstaffeln. Das ganze soll für alle Artikel in einer Abfrage ausgegeben werden. Sehr fragwürdige Architektur. Das wäre doch viel einfacher, wenn diese Preisstaffelung in einer separaten Tabelle abgelegt wäre. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Brodi87 Geschrieben 13. Dezember 2010 Autor Teilen Geschrieben 13. Dezember 2010 also nicht falsch verstehen... es gibt diese extra Tabelle für die Preisstaffeln, nur müssen die Preise mit der Abfrage, in einem Feld zusammengefasst werden (eben nach diesem Schema, wie oben beschrieben). das is echt krank, ich weiß... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
_n4p_ Geschrieben 13. Dezember 2010 Teilen Geschrieben 13. Dezember 2010 auch wenn ich weder das statement noch deine SP debuggen möchte ... aber vielleicht hilft dir das: Concatenating Row Values in Transact-SQL der ansatz mit XML scheint recht interessant. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Sque2109 Geschrieben 13. Dezember 2010 Teilen Geschrieben 13. Dezember 2010 Hey ich bin zur Zeit zwar etwas raus aus den Datenbank geschichten aber ich denke der Fehler liegt in den Group Bys wie sieht es aus mit den Convert ist das so zulässig im Group By ? Korrigiert mich wenn ich falsch liege aber vllt hilft es um die einzelnen Statements ein Subselect zu machen ? ist jetzt nur so auf den ersten Blick weils mich eben wundert ansonsten hatte ich nur Probleme mit nem Distinct aber den Fehler hasz du scheinbar nicht. Gruss Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
etreu Geschrieben 14. Dezember 2010 Teilen Geschrieben 14. Dezember 2010 1. Ich sehe keine zweite Menge für ein 'union'. 2. Kannst du temporäre Tabellen anlegen oder gibt es Container Objekte? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.