wie Sie wissen, wie viele Zeilen betroffen sein wird vor dem ausführen einer Abfrage in microsoft sql server 2008
ich ein bisschen gelesen habe, über ROWCOUNT aber es ist nicht genau das was ich Suche. von meinem Verständnis rowcount gibt die Anzahl der betroffenen Zeilen, NACHDEM Sie die Abfrage ausführen. was ich Suche ist zu wissen, BEVOR Sie die Abfrage ausführen. ist das möglich?
- Nein, es ist nicht möglich, ohne dabei zwei Abfragen. Warum brauchen Sie, um dies zu tun, obwohl? Je nach dem Grund für die Anfrage könntest du vielleicht noch die Abfrage überprüfen
@@ROWCOUNT
dann Begehen, wenn es ist, wie erwartet. Oder verwenden SieCOUNT(*) OVER()
Rückkehr der Zeilenanzahl mit der Abfrage.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kurze Antwort ist Nein..
Bekommst du nicht die Anzahl der Zeilen vor dem ausführen der Abfrage..atleast in SQL server.
Der beste Weg, es zu tun ist, verwenden Sie
dann ausführen der eigentlichen Abfrage
Können Sie auch
BEGIN TRANSACTION
, bevor der Vorgang ausgeführt wird. Sie können die Anzahl der betroffenen Zeilen. Von dort entwederCOMMIT
den Ergebnissen, oder verwenden SieROLLBACK
zu setzen, die Daten wieder in den ursprünglichen Zustand.Überprüfung der geänderten Daten und dann:
oder
Den geschätzten Ausführungsplan geben Sie die betroffenen Zeilen, basierend auf den Statistiken, so wird es nicht wirklich helfen in diesem Fall.
Was ich empfehlen würde, ist das kopieren
UPDATE statement
oderDELETE statement
und verwandelte Sie in eineSELECT
. Laufen, um zu sehen, wie viele Zeilen kommen zurück und Sie haben Ihre Antwort, um wie viele Zeilen wurden aktualisiert oder gelöscht werden.ZB:
wird:
Einfachste Lösung ist, ersetzen Sie die Spalten in der
SELECT * FROM...
mitSELECT Count(*) FROM ...
und den rest der Abfrage(dieWHERE
- Klausel muss der gleiche sein), bevor Sie es ausführen. Dies wird Ihnen sagen, wie viele Zeilen betroffenDie einfachste Lösung scheint nicht zu funktionieren in einem Fall, wo theres eine Unterabfrage. Wie würden Sie select count(*) dieses update:
Hier ich denke, Sie brauchen die TRANSAKTION BEGINNEN