quotespatio.com

  

Beste Artikel:

  
Main / Sybase SQL Insert, wo nicht vorhanden

Sybase-SQL-Einfügung, wo nicht vorhanden

Dies ist eine ziemlich häufige Situation, die beim Ausführen von Datenbankoperationen auftritt. Eine gespeicherte Prozedur wird aufgerufen und die Daten müssen aktualisiert werden, wenn sie bereits vorhanden sind, und eingefügt werden, wenn dies nicht der Fall ist. Wenn wir uns auf die Books Online-Dokumentation beziehen, finden Sie Beispiele, die ähnlich sind wie: Dieser Ansatz funktioniert, ist jedoch möglicherweise nicht immer der beste Ansatz.

In den meisten Standardansätzen bietet die folgende Aussage wahrscheinlich eine bessere Leistung. Denken Sie daran, dass die Beispiele in der MSDN-Dokumentation normalerweise der einfachste Weg sind, etwas zu implementieren, nicht unbedingt der beste.

Wie ich kürzlich wieder gelernt habe, ist es bei jeder Datenbankoperation gut, die verschiedenen Ansätze, die Sie verfolgen, auf Leistung zu testen.

Manchmal übertrifft die Methode, von der Sie glauben, dass sie die schlechteste ist, tatsächlich die Art und Weise, die Sie für die bessere halten. PingBack von http: Danke für den Tipp, ich habe viel Code mit dem minderwertigen Ansatz, den ich aktualisieren werde. In Bezug auf Ihren Beitrag "SQL: Oder bin ich falsch, wenn der Bereich global ist? Sie können einige wirklich unerwartete Ergebnisse erzielen, wenn er nicht ordnungsgemäß verwendet wird. Die Grundidee sollte mit anderen Arten von SQL-Servern funktionieren, ich habe dies jedoch nicht überprüft In der Dokumentation macht es effektiv das Gleiche.

Aber es scheint anders zu sein. Für alles, was noch nicht in der Tabelle vorhanden ist, wird es eingefügt. Ich würde empfehlen, beide Möglichkeiten auszuprobieren und dann die Leistung zu vergleichen, um festzustellen, welche Lösung Ihren Anforderungen besser entspricht. Ich bevorzuge diese Art von Spiel sehr, zum Beispiel einen HitCounter für einen Gegenstand, der automatisch stündlich neue Zeilen einfügt:

Dies ist ein großartiger Ansatz, an den ich nie gedacht habe, und die einzige Sorge, die ich hatte, wurde im Kommentarbereich beantwortet. Ich habe eine Anwendung, die wahrscheinlich immer 4 Zeilen in der Tabelle nach der ersten Iteration aktualisiert.

In Bezug auf die Leistung sollte ich für diese vier Zeilen einen Löschvorgang durchführen und dann jede Zeile einfügen oder einfach vier Aktualisierungen vornehmen? Dies war eine große Hilfe, Jeremiah! Hier ist meine schnelle Lösung: Vielen Dank für den Einblick und weiter zu teilen. Dies ist zweifellos ein großartiger Tipp. Eine Beobachtung ist jedoch, dass er in erster Linie mit schlechtem Code verglichen wird. Probieren Sie es einfach an einem großen Tisch mit einem Massenupdate aus. Trotzdem ist die von Jerimihah angebotene Lösung eine großartige Idee und über den Tellerrand hinaus.

Ich denke, das Hinzufügen eines Fehlerchecks, wie von einem DBA vorgeschlagen, ist ebenfalls eine gute Idee. Oder würde SQL Server die gesamte Anweisung als atomare Operation ausführen?

Soweit ich weiß, ist es in Bezug auf Ihre Frage "thread-sicher". Ich hatte eine Notwendigkeit für eine ähnliche Verwendung, aber auf MySQL.

Dies bedeutet, dass wenn eine Zeile vorhanden ist und Ihr Update erfolgreich war, möglicherweise noch 0 betroffene Zeilen zurückgegeben werden. Zumindest ist mir dies in mySQL begegnet. Aktualisieren Sie einen Blockierungsanruf nicht? Wenn der Benutzer erwartet, dass die meiste Zeit Einfügen stattfinden wird, sollte er, falls vorhanden, die Option Einfügen oder Aktualisieren auswählen auswählen.

In einigen Fällen ist auch nur eine Einfügung erforderlich, wenn kein Datensatz vorhanden ist. Wenn dies nicht der Fall ist, funktioniert die Auswahl der Einfügung am besten. Der Gedanke wird diese also erwähnen. Würde gerne Ihre Ansichten kennen. Es stimmt zwar, dass die Update-Anweisung nichts bewirkt, wenn Sie nur Einfügungen ausführen, aber es ist nicht weniger performant, dass die Verwendung von if vorhanden ist. Im Fall einer Einfügung führen beide einen Tabellenscan oder eine Indexsuche durch, um die Einfügung durchzuführen.

Im Fall von Update zuerst handelt es sich im Wesentlichen um ein No-Op. Der Vorteil wird wirklich sichtbar, wenn Sie sowohl Einfügungen als auch Aktualisierungen durchführen, da die if-exist-Methode zwei Scans ausführt, während die Update-Rowcount-Methode nur 1 ausführt. Wenn Sie jedoch zusätzlich zu Einfügungen Aktualisierungen durchführen, sind die Scans reduziert sehr vorteilhaft. Mein Rat wäre, SQL Profiler zu verwenden und einen Beispieldatensatz mit beiden Methoden auszuführen.

Ihr Tutorial ist sehr schön, da ich in Ihrem Beitrag eine Prozedur erstelle, aber einen Fehler erhalte. Bitte sagen Sie mir, wo ich einen Fehler erhalte. Fehlerbeschreibung: Glücklicherweise haben Sie einen logischen Verstand, solche Ergebnisse abzuleiten, wenn Sie Ihre Sachen wirklich kennen. Ich behaupte nicht, einen logischen Verstand zu haben, wie ich es von den meisten Menschen höre, wenn sie wirklich keine einfachen Probleme lösen können. Dies ist eine Datenbankabfrage. Lassen Sie sich nicht zu sehr von den Leuten mitreißen.

Ehrlich gesagt kann ich meine eigenen Datenspeicherlösungen entwickeln, die sowieso besser als SQL sind, nur nicht so praktisch! Hätte das obige Beispiel nicht ein Problem in Umgebungen mit hohem Volumen? Ich bin kein SQL-Experte, aber es scheint, dass Update nicht gesperrt wird, wenn die Zeile nicht vorhanden ist.

Wenn nicht, haben Sie einen Plan, um ihn umzusetzen? Setzt es den zusätzlichen Lastdruck auf das Transaktionsprotokoll? Gibt es ein kostenloses Tool, das die Anweisung "If Exist Update Else Insert" für alle Datensätze einer bestimmten Tabelle dynamisch generiert? Ich habe Daten aus einer relationalen Datenbanktabelle in eine andere Tabelle Staging DB gegossen. Aber zuerst muss ich den Namen der Datenbank entfernen und zur Tabelle DicDB Staging-Datenbank hinzufügen. Wenn jedoch in DicDB der Name der Datenbank mit einer bestimmten ID eingegeben wird, muss der Name nicht erneut eingegeben werden haben ihre vorhandene ID.

Wenn wir uns auf die Books Online-Dokumentation beziehen, finden Sie Beispiele, die den folgenden ähnlich sind: Wenn vorhanden, aktualisieren Sie Else Insert: 17. Februar 2008 um 10: 17. Februar 2008 um 11: Clark sagt: 18. Februar 2008 um 3: 18. Februar , 2008 um 4: Andrew Herron sagt: 21. Februar 2008 um 12: 21. Februar 2008 um 2: Guy sagt: Richard Ayotte sagt: JohnEric sagt: 21. Februar 2008 um 4: Marc Brooks sagt: 22. Februar 2008 um 6 : Gabriel O.

Perez sagt: 3. März 2008 um 2: 3. März 2008 um 8: Joe Davies sagt: 4. April 2008 um 4: Travis Nelson sagt: 4. Juni 2008 um 11: Geoff Winkless sagt: 16. Juli 2008 um 8: John sagt: 10. November 2008 um 11: Brad sagt: 16. Dezember 2008 um 2: PAKO sagt: 21. Januar 2009 um 6: Martin sagt: 19. Februar 2009 um 8: Mithun sagt: 25. März 2009 um 3: Terry sagt: 15. Mai 2009 um 12: Karthik sagt: 10. Juni 2009 um 8: Karim Sultan sagt:

(с) 2019 quotespatio.com