Dieser Fall ist genau das, was Loops gut sind (und für die entwickelt).
Da Sie Dinge tun, die außerhalb des Datenbankbereichs liegen, ist es absolut legitim, für sie Schleifen zu verwenden.
Datenbanken dienen zum Speichern von Daten und zum Ausführen der Abfragen für diese Daten, die sie am praktischsten zurückgeben.
Relationale Datenbanken können Daten in Form von Rowsets zurückgeben.
Cursor (und Schleifen, die diese verwenden) sollen ein stabiles Rowset erhalten, so dass einige Dinge mit jeder Zeile erledigt werden können.
Mit "Dinge" meine ich hier keine reinen Datenbanktricks, sondern reale Dinge, die die äußere Welt betreffen, die Dinge, für die die Datenbank gedacht ist, sei es eine Tabelle auf einer Webseite, einen Finanzbericht oder eine E-Mail .
Es ist schlecht, Cursors für reine Datenbankaufgaben zu verwenden (wie das Umwandeln eines Rowsets in ein anderes), aber es ist vollkommen nett, sie für die Dinge zu verwenden, die Sie beschrieben haben.
Set-basierte Methoden sind so konzipiert, dass sie innerhalb einer einzigen Transaktion arbeiten.
Wenn Ihre Set-Base-Abfrage aus irgendeinem Grund fehlschlägt, wird die Datenbank in den vorherigen Zustand zurückgesetzt, aber Sie können eine gesendete E-Mail nicht "zurücksetzen". Sie können Ihre Nachrichten im Falle eines Fehlers nicht verfolgen.
Loops scheinen für diese ideal. Können Sie erklären, warum Sie sie vermeiden möchten? –
Schleifen sind eine schlechte Idee für diese Art von Sache. Siehe unten. – NotMe
Ich mag Schleifen nicht schreiben und würde lieber eine Set-basierte Methode verwenden. – Sam