Announcement

Collapse
No announcement yet.

Insert oder Bedingtes Update zu langsam

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Insert oder Bedingtes Update zu langsam

    Hallo, ich möchte in einer SQL-DB Datensätze einfügen. Dabei gibt es 3 Möglichkeiten:
    1. Key existiert noch nicht => Insert
    2. Key existiert; Quelldatum neuer Datensatz ist aktueller als vorhandener => Update
    3. Key existiert; Quelldatum neuer Datensatz ist älter als vorhandener => kein Update (und natürlich kein Insert).

    Wie könnte man dies geschickt in SQL realisieren? Bisher gehe ich so vor:
    1. Locate findet keinen Satz => Insert
    2. Locate findet Satz; Datum aktueller => Update
    3. Locate findet Satz; Datum älter => "neuen" Datensatz verwerfen
    Das ganze ist gähnend langsam, wenn man mal ein paar hundert Sätze in der Db abgleichen will.
    Bin für jeden Tip dankbar! Jürgen

  • #2
    Hallo Jürgen,

    wenn dein Key ein Unique-Index ist, dann könntest du so vorgehen:
    1.Insert => wenn kein Fehler ok (key noch nicht da), wenn Unique-Index Fehler dann 2.Update Tabelle set blablabla where Tabellendatum < Neuesdatum

    Gruß Fal
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      Hallo,

      um die maximale Performance zu erreichen, muss die Prüfung/Ablaufsteuerung von der Client-Seite auf die Server-Seite verlagert werden, damit kein Ping-Pong-Spiel der gegenseitigen Netzwerkzugriffe zwischen Client und SQL Server notwendig ist. Das würde zum Beispiel so aussehen:

      1. Client ruft eine eigene Stored Procedure in der SQL-Datenbank auf und übergibt dabei alle Daten als Parameter.

      2. Innerhalb der Stored Procedure wird geprüft, ob der Primärschlüsselwert bereits vorhanden ist (INSERT) oder ob der bereits vorhandene Datensatz älter ist (UPDATE).

      Der Vorteil liegt darin, dass je Datensatz nur ein einziger Aufruf vom Client zum SQL-Server geht und die Performance unabhängig von der CPU-Leistung des Clients und der Netzwerkbandbreite ist

      Comment


      • #4
        Hallo,<BR>
        erst einmal vielen Dank für Eure schnelle Antwort. Nun habe ich mal ein bißchen versucht, in die StoredProcedures reinzukommen. Ich arbeite mit Access über ADO-Query. Weder in der Delphi- noch in der Access-Hilfe habe ich ein kleines Bsp. gefunden, wie ein Client dem Server einen Datensatz einfügen oder updaten kann. Auch in Andreas' DB-Buch bzw. in den Delphi-Demos habe ich kein Bsp. gefunden. Könnte mir da evtl. jemand eine Anregung geben, wie ich das angehen könnte

        Comment


        • #5
          Hallo,

          Access ist eine Desktop-Datenbank. StoredProc's stehen aber nur bei SQL-Servern zur Verfügung (zumindest bei den meisten).

          Tschüß

          Torste

          Comment

          Working...
          X