Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Simpler Klammerfehler???

Empfohlene Antworten

Veröffentlicht

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



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

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

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?

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



Ok, ich habs begriffen.

Ich weiss aber nicht was du eigentlich machen wolltest :D

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

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.

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.

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ß...:D

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

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.