it-swarm.com.de

Wie kann ich die Anzahl der von einer gespeicherten Prozedur betroffenen Datensätze ermitteln?

Bei SQL-Anweisungen INSERT, UPDATE und DELETE, die direkt für die Datenbank ausgeführt werden, geben die meisten Datenbankanbieter die Anzahl der betroffenen Zeilen zurück. Bei gespeicherten Prozeduren ist die Anzahl der betroffenen Datensätze immer -1.

Wie ermitteln wir die Anzahl der Datensätze, die von einer gespeicherten Prozedur betroffen sind?

83
dthrasher

Registrieren Sie einen out-Parameter für die gespeicherte Prozedur und legen Sie den Wert basierend auf @@ROWCOUNT Fest, wenn Sie SQL Server verwenden. Verwenden Sie SQL%ROWCOUNT, Wenn Sie Oracle verwenden.

Beachten Sie, dass Sie bei mehreren INSERT/UPDATE/DELETE Für jede Operation eine Variable benötigen, um das Ergebnis von @@ROWCOUNT Zu speichern.

79
OMG Ponies

@@RowCount gibt die Anzahl der Datensätze an, die von einer SQL-Anweisung betroffen sind.

Das @@RowCount funktioniert nur, wenn Sie es unmittelbar danach ausstellen. Wenn Sie also Fehler abfangen, müssen Sie dies in derselben Zeile tun. Wenn Sie es aufteilen, verpassen Sie den zweiten Platz.

SELECT @NumRowsChanged = @@ROWCOUNT, @ErrorCode = @@ERROR

Wenn Sie mehrere Anweisungen haben, müssen Sie die Anzahl der betroffenen Zeilen für jede einzelne erfassen und addieren.

SELECT @NumRowsChanged = @NumRowsChanged  + @@ROWCOUNT, @ErrorCode = @@ERROR
44
Raj More

Es stellte sich für mich heraus, dass SET NOCOUNT ON Im Skript für gespeicherte Prozeduren (standardmäßig in SQL Server Management Studio) festgelegt wurde und SqlCommand.ExecuteNonQuery(); immer -1 zurückgab.

Ich habe es nur aufgehoben: SET NOCOUNT OFF, Ohne @@ROWCOUNT Verwenden zu müssen.

Weitere Details finden Sie hier: SqlCommand.ExecuteNonQuery () gibt -1 zurück, wenn Insert/Update/Delete ausgeführt wird

29
Dude Pascalou

Für Microsoft SQL Server können Sie das @@ROWCOUNT Variable, um die Anzahl der Zeilen zurückzugeben, die von der letzten Anweisung in der gespeicherten Prozedur betroffen sind.

8
Bob Mc
5
Fredou