attix22
Goto Top

T-SQL Fehler bei Abfrage

Guten Tag,

ich habe hier eine Abfrage, die von einem nichtmehr verfügbaren Dienstleister stammt.
Diese wurde angepasst und funktioniert jetzt nichtmehr.
Hier die Abfrage:

-- GD ermitteln

update #wt
set GDK= (select AVG([Preis]) from #wt where ID between t.ID - @x + 1 and t.ID)
from #wt as t

UPDATE #erg
set Datumv2 = #wt.Datum
, Preisv2 = #wt.[Preis]
, Preis_GDv2 = #wt.GDK
from #wt inner join #erg

insert into [A_Ergebnis24v2]
select * from #erg

Der SQL Server gibt folgende Fehlermeldung aus: Syntaxfehler bei Zeile XX insert into

Ich verstehe nicht was hier an der Syntax falsch sein soll, die Tabellen #wt und #erg werden quasi in [A_Ergebnis24v2] zusammengeführt.

Kann jemand mit diesem Code Schnipsel etwas anfangen?
Alternativ wäre ich über eine Hilfestellung wie man eine solche Abfrage "debuggt" sehr dankbar.

Vielen Dank und Frohe Ostern im Vorraus

Attix22

Content-ID: 165020

Url: https://administrator.de/forum/t-sql-fehler-bei-abfrage-165020.html

Ausgedruckt am: 22.12.2024 um 20:12 Uhr

Pjordorf
Pjordorf 21.04.2011 um 11:55:23 Uhr
Goto Top
Hallo,

Zitat von @attix22:
Diese wurde angepasst und funktioniert jetzt nichtmehr.
Hoffentlich hast du noch den Quellcode von vor der Änderung!

Der SQL Server gibt folgende Fehlermeldung aus: Syntaxfehler bei Zeile XX insert into
Zeile XX ist hier nirgendswo!

Ich verstehe nicht was hier an der Syntax falsch sein soll, die Tabellen #wt und #erg werden quasi in [A_Ergebnis24v2]
zusammengeführt.
Was wird hier zusammengeführt? Woraus setzt sich A_Ergenbis24v2 zusammen?

Ohne das du den entzsprechenden Code mit allen relaveanten Daten hier angibst, können dir hier nur mit einer Schnutzigen Galskugel Ratschläge gegeben werden. Nur du hast den ganzen Quellcode. Nur du kennst den aufbau deiner Tabellen. Nur du weisst ob es sich um weitere abfrage / SP oder sonst noch was handelt.

Kann jemand mit diesem Code Schnipsel etwas anfangen?
Ja, aber sehr wenig.

Alternativ wäre ich über eine Hilfestellung wie man eine solche Abfrage "debuggt" sehr dankbar.
Nun, wie du so schön schreibst:
Diese wurde angepasst und funktioniert jetzt nichtmehr
Schau dir alle Änderungen von da ging es noch bis zu jetzt geht es nicht mehr an und versuche zu verstehen was dort gemacht werden soll / wird.

Ohne weitere hinweise auf OS, Datenbanksystem, Entwicklungsumgebung usw wird eine genaue Hilfestellung fast unmöglich sein.

Gruß,
Peter
Indrador
Indrador 21.04.2011 um 12:52:05 Uhr
Goto Top
Ich würde mal ins blaue Tippen, da die Infos leider nichts anderes zulassen,
dass die Tabelle A_Ergebnis24v2 mehr Spalten hat #erg im speziellen wahrscheinlich
einen auto increment wert, der automatisch befüllt wird.
Wenn meine Vermutung zutrifft und es 4 spalten gibt eine id auto increment z.B. müsste der Insert folgendermaßen aussehen:

insert into [A_Ergebnis24v2] (SpalteA, SpalteB, SpalteC)
select * from #erg

Wobei SpalteA dann für Datumv2, SpalteB für Preisv2 und SpalteC für Preis_GDv2 mit den entsprechenden richtigen Spaltennamen stehen.

Aber wie gesagt, das ist nur eine Vermutung, weil es praktisch keine Infos gibt.

Gruß
Biber
Biber 21.04.2011 um 13:01:14 Uhr
Goto Top
....is' ja auch blöd, dass er die Kommentarzeilen aus den Statements nicht mitgepostet hat ... face-wink
MadMax
MadMax 21.04.2011 um 13:04:17 Uhr
Goto Top
Moin,

so ganz spontan würde ich mal sagen, da fehlen die Spalten fürs join:
UPDATE #erg
set Datumv2 = #wt.Datum
, Preisv2 = #wt.[Preis]
, Preis_GDv2 = #wt.GDK
from #wt inner join #erg

Gruß, Mad Max
attix22
attix22 21.04.2011 um 13:04:30 Uhr
Goto Top
Ohne weitere hinweise auf OS, Datenbanksystem, Entwicklungsumgebung usw wird eine genaue Hilfestellung fast unmöglich sein.
Gruß,
Peter

OS: Windows Server 2003
Datenbank: Microsoft SQL Server 2005

@Indrador

Dein Tipp sieht vielversprechend aus, ich werde das ganze nachher dahingehend prüfen.
Vielen Dank
Biber
Biber 21.04.2011 um 13:21:48 Uhr
Goto Top
Moin Mad Max,

Zitat von @MadMax:
so ganz spontan würde ich mal sagen, da fehlen die Spalten fürs join:

Nein, das muss nicht.
M$ hält sich für besser SQLisch sprechend als diese ISO-gläubigen Weicheier aka der Rest des Planeten.

Laut M$ reicht
.... QuellTabelle1 [Join-Typ] Tabelle [ON (Join Bedingung)]
--> d.h. die komplette [ON (Join Bedingung)] ist optional.

[Unter der Bedingung, das die Spaltennamen in beiden Tabellen gleich sind und es in einer Tabelle PK, in der anderen FK ist etc.]


Aber ist halt sauschlechter Stil und senkt die Wartbarkeit nooch tiefer als die fehlenden Kommentare

Grüße
Biber
Indrador
Indrador 21.04.2011 um 13:22:31 Uhr
Goto Top
Zitat von @MadMax:
Moin,

so ganz spontan würde ich mal sagen, da fehlen die Spalten fürs join:
> UPDATE #erg
> set Datumv2 = #wt.Datum
> , Preisv2 = #wt.[Preis]
> , Preis_GDv2 = #wt.GDK
> from #wt inner join #erg
> 

Gruß, Mad Max


Hi, warum sollte es sich ans insert wieder irgendwas dran Joinen, wenn er sich im Schritt vorher #erg komplett per update befüllt?
Beim update Schritt ist #erg mit allen 3 spalten befüllt.
attix22
attix22 21.04.2011 um 13:51:54 Uhr
Goto Top
Vielen Dank für die Hilfe.
Das Problem wurde inzwischen gelöst, die Datenquelle wurde neu angelegt und jetzt flutscht es.
Wurde zwar gestern schonmal gemacht aber dass ist mir jetz egal.

Vielen Dank und ein schönes verlängertes Wochenende
MadMax
MadMax 21.04.2011 um 17:18:10 Uhr
Goto Top
Puh, eben hast Du mich aber erschreckt face-smile

Aber Du liegst falsch, selbst der SQL Server braucht ein "on x = y", daß es optional wäre, kann sich allenfalls auf den cross join beziehen.

Und der Fehler wird dann beim Folgebefehl angezeigt (hier das insert), weil an der Stelle ja das "on" erwartet wird.

Gruß, Mad Max