Neu SQL prozeduren mit #temp Tabellen

  • Hinweis: Am 25.02.2025 zwischen 21:30 u. 22:30 Uhr - Einschränkungen beim Login und Erreichen folgender Dienste: FFN, Kundencenter, Admin, JTL-Shop, JTL-Wawi, Lizenzserver, ISI Gateway, Vouchers, Kassensysteme, Plan&Produce, Versand. Grund dafür ist ein Major Upgrade des OAuth-Dienstes. Vielen Dank für euer Verständnis!

mvh

Sehr aktives Mitglied
26. Oktober 2011
812
290
Moin.
Erstens - in deinem Code brauchst Du keine Temp-Table, MAXIMAL Tabellen-Variable, aber auch hier meine Frage - wozu, da ist nur ein SELECT.
Zweitens - eine SP soll in Custom View NICHT benutzt werden, nur Funktionen sind erlaubt (und auch dort kannst Du eine Tabellen-Variable definieren)
Drittens - ein Forum ist nicht nur zum Schreiben da, sondern auch zum Lesen, Lernen, Verstehen und ggf. Akzeptieren.
 
  • Gefällt mir
Reaktionen: wawi-dl

chx_de

Gut bekanntes Mitglied
12. August 2016
134
13
Uff! Hast du die vorherigen Antworten, die du hier erhalten hast überhaupt gelesen? ;)

Das kannst du deshalb nicht speichern, weil zu dem Zeitpunkt, wenn du auf <Speichern> klickst kein #temp1 existiert.
Es gibt jetzt mehrere Möglichkeiten, wie du das umgehen kannst.
Das was ICH machen würde, habe ich in #13 beschrieben:
in der Wawi würde ich die eigene Übersicht als SELECT 'execute eazybusiness.dbo.spToci_JTL_Test @key' eingeben und nach dem dann erfolgreichen speichern: update dbo.tCustomerQuery set cQueryText='execute eazybusiness.dbo.spToci_JTL_Test @key' where convert(varchar(max), cQueryText ) = 'SELECT ''execute eazybusiness.dbo.spToci_JTL_Test @key'''
Jo habe ich. Und mir ist bewusst, dass es zum Zeitpunkt des Speicherns keine #temp gibt. Mir ist auch klar, dass dies der Fehler ist. Das ist aber für das abspeichern eigentlich total irrelevant :) --- also ob eine #temp existiert oder nicht. Hat ja bis zu Version XXX auch immer funktioniert.

- Umgehen könnte man das mit einer festen Tabelle ==> Nachteil bei mehreren gleichzeitigen Zugriffen auf die Tabelle, da die ja immer geleert werden müsste.
- Andere Alternative wäre @temp Tabellen Variablen ==> Nachteil ist, dass die nicht in weiteren Prozeduren zur Verfügung stehen und Probleme mit aggregierten Abfragen machen
- Meine Lösung ist auch die von dir beschriebene, dass ich dann einfach den Code direkt in die Datenbank schreibe.

Trotzdem Danke für die Antworten und die Mühe.

LG
Christian
 

mh1

Sehr aktives Mitglied
4. Oktober 2020
1.707
514
- Umgehen könnte man das mit einer festen Tabelle ==> Nachteil bei mehreren gleichzeitigen Zugriffen auf die Tabelle, da die ja immer geleert werden müsste.
um Probleme, die beim gleichzeitigen Zugriff entstehen könnten bzw. das Locking kümmert sich doch der SQL-Server 🤔
Wenn der Zugriff also das Auslesen einer Tabelle zu Problemen führt (z.b. eine Art von Race Condition), dann ist dies meist ein guter Hinweis darauf, dass die Abfrage überdacht bzw. umgebaut werden muss (bitte nicht als Abwertung deiner SQL Kenntnisse verstehen, sondern nur als gut gemeinten Hinweis).

- Andere Alternative wäre @temp Tabellen Variablen ==> Nachteil ist, dass die nicht in weiteren Prozeduren zur Verfügung stehen und Probleme mit aggregierten Abfragen machen
Aha! Da du anscheinend Daten speichern willst wo verschiedene Stored Procedures drauf zugreifen können, kommst du ja mit der #temp aus der ersten Stored Procedure eh nicht weiter.
Denn die innerhalb der SP erstellte #Temp wird doch beim Verlassen der SP sowieso entfernt ;)

Ich würde jedoch behaupten, dass, wenn Du ständig eine Relation löschen und neu erstellen musst, wahrscheinlich etwas grundsätzlich falsch angegangen wird. Wieder bitte nicht als Abwertung sehen!
Ich würde "einen Schritt zurück machen" (oder auch mehrere?) und anstatt auf das Eigene-Übersichten-speichern Problem eher auf die Abfrage konzentrieren und diese neu denken.
 

chx_de

Gut bekanntes Mitglied
12. August 2016
134
13
Hi,

da muss ich dir leider wiedersprechen :)
Aha! Da du anscheinend Daten speichern willst wo verschiedene Stored Procedures drauf zugreifen können, kommst du ja mit der #temp aus der ersten Stored Procedure eh nicht weiter.
Denn die innerhalb der SP erstellte #Temp wird doch beim Verlassen der SP sowieso entfernt ;)
Das ist so nicht korrekt. Die #temp Tabelle bleibt während der ganzen Sitzung erhalten und wird nur geschlossen, wenn entweder die Sitzung beendet oder aber die Tabelle mit DROP gelöscht wird. Deswegen kannst du dann auch selbstverständlich mit anderen SP auf die Daten in der #temp Tabelle zugreifen.

Damit es bei Create #temp nicht zu einem Fehler kommt, macht es Sinn immer das vorhanden sein der temporären Tabelle zu prüfen
SQL:
drop table if exists #Temp

Ebenso ist es gut, am Ende des Codes die #temp mittels Drop zu löschen.

um Probleme, die beim gleichzeitigen Zugriff entstehen könnten bzw. das Locking kümmert sich doch der SQL-Server
Das ist mir schon klar. Aber ich möchte ja die Daten aus diversen Select Statements in einer temporären Tabelle speichern und auch nur genau diese Daten später weiter verarbeiten. Genau dafür sind temporäre Tabellen oder Tabellenvariablen ja da. Wenn ich mir anstatt einer #temp Tabelle jetzt eine permanente Tabelle anlege, dann kann es sein, dass mehrere Nutzer in unterschiedliche Sitzungen gleichzeitig Daten in diese Tabelle schreiben. Und genau dann gibt es ein Problem in dem nachfolgenden Code. Weil dieser dann Daten weiterverarbeitet, die eigentlich nicht nur USER1 zuzuordnen sind. Noch schlimmer wird es, wenn dann USER1 in seiner Session die Tabelle am Ende mittels DELETE ' leert. Dann wären die Daten für USER 2 auch weg. Kann man sicherlich durch Keys oder SessionIDs lösen.

Aber warum soll ich mir das antun, wenn es genau dafür in T-SQL das Objekt der temporären Tabelle gibt;)

Ich werde morgen mal den angepassten Code posten. Im Grunde geht es um die Auswertung der Amazon Settlement Daten. Ich habe für uns noch die PPC Kosten mit einbezogen. Wir lesen die Amazon ADS API aus, transformieren die Daten und speichern die auch im SQL Server ab. Dann haben wir noch weitere Tabellen mit erweiterten Artikeldaten und Kalkulation Daten, die wir für eine vernünftige Kalkulation bzw. Nachkalkulation benötigen. Diese Daten stehen ja nur uns zur Verfügung, deswegen muss ich den Code mal auf die Abfragen beschränken, die jeder JTL Nutzer von haus aus hat. Wenn jemand Interesse an der Auswertung inklusive PPC etc hat, genre melden .-)
 

chx_de

Gut bekanntes Mitglied
12. August 2016
134
13
Moin.
Erstens - in deinem Code brauchst Du keine Temp-Table, MAXIMAL Tabellen-Variable, aber auch hier meine Frage - wozu, da ist nur ein SELECT.
Zweitens - eine SP soll in Custom View NICHT benutzt werden, nur Funktionen sind erlaubt (und auch dort kannst Du eine Tabellen-Variable definieren)
Drittens - ein Forum ist nicht nur zum Schreiben da, sondern auch zum Lesen, Lernen, Verstehen und ggf. Akzeptieren.
Hi, ich lese und verstehe das schon - mach dir da mal keine Sorgen :) Der Code, den ich zum testen gepostet hatte besteht tatsächlich nur aus einem Select. Das war ja auch nur zum Verständnis des Problems. Die eigentliche Prozedur ist ein wenig komplexer und in dem Code funktioniert dann auch keine @Tabellenvariable mehr. Wie ich weiter oben schon geschrieben habe, werde ich den morgen mal posten

Zweitens - eine SP soll in Custom View NICHT benutzt werden, nur Funktionen sind erlaubt (und auch dort kannst Du eine Tabellen-Variable definieren)
Wo genau steht das? War mit so nicht bekannt und wird von uns schon seit Einführung der Custom Views so praktiziert.
 

chx_de

Gut bekanntes Mitglied
12. August 2016
134
13
So hier im Anhang die beiden SQL Prozeduren. Den Teil mit der PPC Abfrage habe ich auskommentiert, da er ja normalerweise in in JTL zur Verfügung steht.
Sämtlich Kosten für AFN sind in der Settlement Datei enthalten. Für das MFN Porto+ Karton habe ich bei uns fix 4.5 angesetzt. Für die MFN Retouren 5 Euro. Die exakten Daten liegen auch in einer Tabelle und müssen noch in die Abfrage eingebaut werden.

Nicht berücksichtig werden hier in diesem Beispiel: PPC Kosten, Amazon Lager Kosten, Kosten für Remissionen (die würde man aber über sie SP API bekommen), Erlöse durch Erstattung für verlorene Ware, etc.
 

Anhänge

  • SQLQuery1.sql.txt
    13,8 KB · Aufrufe: 6
  • SQLQuery2.sql.txt
    11,7 KB · Aufrufe: 2

mh1

Sehr aktives Mitglied
4. Oktober 2020
1.707
514
Das steht dir natürlich frei.


Das ist so nicht korrekt. Die #temp Tabelle bleibt während der ganzen Sitzung erhalten und wird nur geschlossen, wenn entweder die Sitzung beendet oder aber die Tabelle mit DROP gelöscht wird. Deswegen kannst du dann auch selbstverständlich mit anderen SP auf die Daten in der #temp Tabelle zugreifen.
Das Verhalten der Temp Tables ist hier dokumentiert:
https://learn.microsoft.com/en-us/s...ct-sql?view=sql-server-ver16#temporary-tables
(siehe auch erster Aufzählungspunkt)

Damit es bei Create #temp nicht zu einem Fehler kommt,
Es ist eher unüblich, einen Temp Table zuerst mit Create zu erstellen und dann mit inserts zu befüllen

macht es Sinn immer das vorhanden sein der temporären Tabelle zu prüfen
SQL:
drop table if exists #Temp
Je nach Anwendungsfall kann evtl. schon nötig sein :thumbsup:
Um verschiedene TempTables aber intern zu unterscheiden hängt der SQL-Server an den Namen einfach ein eindeutiges Suffix an.
 
Ähnliche Themen
Titel Forum Antworten Datum
Neu Suche SQL Abfrage für Hersteller die keinem Artikel mehr zugeordnet sind. User helfen Usern - Fragen zu JTL-Wawi 6
MS SQL von JTL an N8N anbinden JTL-Wawi 1.9 5
Neu SQL Abfrage für offene Aufträge über Ameise User helfen Usern - Fragen zu JTL-Wawi 5
Neu Suche Kenner der MS SQL Datenbanken und JTL-WaWi vorzugsweise Raum Aachen Dienstleistung, Jobs und Ähnliches 1
Mehrere SQL Server JTL-Wawi 1.9 6
Neu Shop Komplettabgleich nicht möglich, Globale Daten verstopft SQL Tabelle tGlobalsQueue komplett JTL-Wawi - Fehler und Bugs 0
Neu Was passiert wenn ich Amazon Aufträge, Lieferscheine und Rechnungen per SQL aus der WAWI-Datenbank lösche? User helfen Usern - Fragen zu JTL-Wawi 0
Neu Installation MS SQL 2022 Express: Fehler beim Warten auf das Wiederherstellungshandle des Datenbankmoduls Installation von JTL-Wawi 9
SQL Abfrage bei Workflow Datei Schreibn JTL-Wawi 1.9 1
Neu SQL-Abfrage von im Onlineshop aktiven Artikeln JTL Ameise - Eigene Exporte 2
Neu Biete: Windows Server optimiert für JTL und MS SQL Standard Lizenz (8 Monate alt, 42% unter Neupreis) Dienstleistung, Jobs und Ähnliches 1
Gespeicherte Filter (Lagerbewertung) nach SQL Umzug nicht mehr abrufbar JTL-Wawi 1.9 0
Neu Umzug von SQL 2016 Express auf SQL 2019 Standard mit Wawi 1.8.12.2 Installation von JTL-Wawi 10
Neu Update für Shopvote 1.1.0 führt zu SQL-Fehler Plugins für JTL-Shop 5
Neu SQL: Positionen eines Auftrags sind auf welchem Lieferschein gelandet? Eigene Übersichten in der JTL-Wawi 7
Neu Backup einrichten, habe die SQL Anmeldedaten verlegt Installation von JTL-Wawi 1
Onlineshop Suchbegriffe Such-Schlagwörter mit Shopware 6 JTL-Wawi 1.9 0
Neu Mitarbeiter mit schlechten Kundenumgang Starten mit JTL: Projektabwicklung & Migration 9
Neu Falsche Preisübermittlung von Brutto/Netto Preisen mit JTL Connector zu Shopify Onlineshop-Anbindung 0
Neu Mehrere DHL Versenden 3.0 Instanzen mit unterschiedlichen Accounts möglich? JTL-ShippingLabels - Ideen, Lob und Kritik 3
Neu Einem Kunden eine Rechnung mit individuellem Betreff per E-Mail zusenden User helfen Usern - Fragen zu JTL-Wawi 2
Artikelzustand wird doppelt und mit doppeltem Suffix erzeugt JTL-Wawi 1.9 3
Neu Abgleich Probleme mit Woocommerce und Jtl-Conncetor WooCommerce-Connector 0
Neu Google Search Console: 5xx-Fehler für nicht indexierte Seiten mit URL-Parametern – Warum? Betrieb / Pflege von JTL-Shop 3
Neu Megamenü mit Bilder der eigenen Seiten Technische Fragen zu Plugins und Templates 2
Neu Verknüpfung mit Hornbach eBay-Anbindung - Ideen, Lob und Kritik 1
Neu Artikel Upload Probleme mit Wawi Version 1.9.6.5 und B2B Market Plugin WooCommerce-Connector 6
Beantwortet Wunschzettel buggy - doppelt und überlappt mit Footer JTL-Shop - Fehler und Bugs 3
Artikel mit Unterstrich werden nicht angezeigt JTL-Wawi 1.9 7
Neu Reparaturen mit Berechnung von Ersatzteilen Arbeitsabläufe in JTL-Wawi 5
Neu Fehler: Eine Bestellung wird nicht mit Wawi synchronisiert JTL-Shop - Fehler und Bugs 2
In Bearbeitung Gesucht: EC Kartenlesegerät welches stabil mit der JTL POS App funktioniert JTL-POS - Fragen zu Hardware 5
Neu Probleme mit Kauflizenzen und Tariflizenz – Unklarheiten und fehlende Nutzungsmöglichkeiten Allgemeine Fragen zu JTL-Shop 7
Rechnungsformular wie USt.ID.Nr. des Kunden mit einbinden JTL-Wawi 1.9 1
Neu Exteme Probleme mit SEO Allgemeine Fragen zu JTL-Shop 10
Artikel bekommt neue EAN - Wie mit Produktgenerationen umgehen? JTL-Wawi 1.9 0
Probleme mit dem Anlegen von Herstellern seit Update auf Version 1.9.7.0 JTL-Wawi 1.9 5
Eigenes Feld auf Auftragsbestätigung ausgeben und den Titel mit dem eigenen Feld verknüpfen JTL-Wawi 1.9 0
Eigenes Feld auf Lieferschein ausgeben und den Titel mit dem eigenen Feld verknüpfen JTL-Wawi 1.9 0
Neu Vorlage Mail an DHL mit - Sendungsnummer im Betreff User helfen Usern - Fragen zu JTL-Wawi 5
Gelöst Workflow Auftrag mit Positionsabfrage geht nicht, wegen Textposition für den Versand JTL-Workflows - Ideen, Lob und Kritik 1
Neu Paket ins Ausland kommt zurück - wie macht Ihr das denn mit den zweiten Versandkosten? User helfen Usern - Fragen zu JTL-Wawi 3
E-Rechnung-Webinar: Dokumentenmanagement optimieren mit GREYHOUND Messen, Stammtische und interessante Events 0
E-Rechnung-Webinar: Dokumentenmanagement optimieren mit GREYHOUND Messen, Stammtische und interessante Events 0
E-Rechnung-Webinar: Dokumentenmanagement optimieren mit GREYHOUND Messen, Stammtische und interessante Events 0
E-Rechnung-Webinar: Dokumentenmanagement optimieren mit GREYHOUND Messen, Stammtische und interessante Events 0
E-Rechnung-Webinar: Dokumentenmanagement optimieren mit GREYHOUND Messen, Stammtische und interessante Events 0
E-Rechnung-Webinar: Dokumentenmanagement optimieren mit GREYHOUND Messen, Stammtische und interessante Events 0
Problem mit Rückbuchung im Zahlungsmodul JTL-Wawi 1.9 1
Neu Probleme mit dem Encoding / Umlauten Betrieb / Pflege von JTL-Shop 2

Ähnliche Themen