Zum Inhalt springen

Simpler Klammerfehler???


Brodi87

Empfohlene Beiträge

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? :D


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



Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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? :D

Goos

PS: ..oder hab ichs schon wieder nicht verstanden?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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



Link zu diesem Kommentar
Auf anderen Seiten teilen

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 :D )

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Problem ist das diese Preisstaffeln in einem einzigen Feld untergebracht werden muss (bitte nich fragen warum, ist noch komplexer :D )

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...