Zählen der Anzahl gelöschter Zeilen in einer gespeicherten SQL Server-Prozedur
In SQL Server 2005 gibt es eine Möglichkeit das löschen von Zeilen und erzählt wird, wie viele waren eigentlich gelöscht?
Ich könnte einen select count(*)
mit den gleichen Bedingungen, jedoch brauche ich dies für absolut vertrauenswürdig.
Meine erste Vermutung war, mit @@ROWCOUNT
Variablen - aber das ist nicht gesetzt, z.B.
delete
from mytable
where datefield = '5-Oct-2008'
select @@ROWCOUNT
gibt immer eine 0.
MSDN schlägt vor, die OUTPUT
Bau, z.B.
delete from mytable
where datefield = '5-Oct-2008'
output datefield into #doomed
select count(*)
from #doomed
diese nicht wirklich mit einem syntax-Fehler.
Irgendwelche Ideen?
InformationsquelleAutor der Frage Unsliced | 2008-10-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie versucht
SET NOCOUNT OFF
?InformationsquelleAutor der Antwort wcm
Ich mit @@ROWCOUNT-für genau diesen Zweck in SQL2000 ohne Probleme. Stellen Sie sicher, dass Sie nicht versehentlich zurücksetzen dieser Zählung, bevor es die Kontrolle, obwohl (BOL: 'Diese variable auf 0 gesetzt ist, indem Sie eine Anweisung, die keine Zeilen zurückgeben, wie eine IF-Anweisung').
InformationsquelleAutor der Antwort Simon
Nur dazu:
wo ist p1 der output-parameter in der gespeicherten Prozedur.
Hoffe, es hilft.
InformationsquelleAutor der Antwort Adly
In deinem Beispiel
@@ROWCOUNT
funktionieren sollte - es ist ein richtiger Weg, um herauszufinden, eine Anzahl der gelöschten Zeilen. Wenn Sie versuchen, löschen Sie so etwas von Ihrer Anwendung, dann müssen Sie mitSET NOCOUNT ON
Laut MSDN @@ROWCOUNT-Funktion wird aktualisiert, auch wenn SET NOCOUNT AUF als
SET NOCOUNT
wirkt sich nur auf die Nachricht, die Sie erhalten, nachdem die Ausführung.So, wenn Sie versuchen, um das arbeiten mit den Ergebnissen der
@@ROWCOUNT
aus, zum Beispiel ADO.NET dannSET NOCOUNT ON
definitiv helfen sollte.InformationsquelleAutor der Antwort Ilya Kochetov
Fand ich einen Fall, wo Sie nicht verwenden können
@@rowcount
, wie, wenn Sie wollen, um zu wissen, die distinct count-Werte, die gelöscht wurden, statt der Gesamtzahl. In diesem Fall müssen Sie Folgendes tun:Den syntax-Fehler im OP war, weil
output
nichtdeleted
vor derdatefield
Feld name.InformationsquelleAutor der Antwort James L.
Erstellen temporäre Tabelle mit einer Spalte id.
Insert into temp-Tabelle die Auswahl der ids Sie löschen möchten. Das gibt Ihnen Ihre Zählung.
Löschen aus Ihrer Tabelle where id in (select id from temp-Tabelle)
InformationsquelleAutor der Antwort Corey Trager
Aus Neugier, wie rufst du die Prozedur? (Ich gehe davon aus, dass es eine gespeicherte Prozedur ist?). Der Grund warum ich Frage ist, dass es einen Unterschied zwischen einer gespeicherten Prozedur zurückgeben Wert (das wäre in diesem Fall 0) und ein Ergebnis-rowset, das wäre in diesem Fall eine einzelne Zeile mit einer einzelnen Spalte. In ADO.Net der ehemalige würde aufgerufen werden, indem Sie einen parameter und die letzteren mit einem SqlDataReader. Sind Sie vielleicht eine Verwechslung mit der Prozedur Rückgabewert als rowcount?
InformationsquelleAutor der Antwort Howard Pinsley