Jak mogę uzyskać liczbę rekordów, na które ma wpływ procedura składowana?


86

Na INSERT, UPDATEi DELETESQL wykonywanych bezpośrednio na bazie danych, większość dostawców baz danych zwróci liczbę wierszy. W przypadku procedur składowanych liczba rekordów, których to dotyczy, jest zawsze -1.

Jak uzyskać liczbę rekordów, na które ma wpływ procedura składowana?


1
Set No Count też był moim problemem. Aby przetestować, wykonaj procedurę składowaną w Management Studio i sprawdź, czy otrzymujesz liczby, a jeśli tak, upewnij się, że masz zmienną wyjściową.
user2624356

Odpowiedzi:


80

Zarejestruj parametr out dla procedury składowanej i ustaw wartość na podstawie tego, @@ROWCOUNTczy używasz programu SQL Server. Użyj, SQL%ROWCOUNTjeśli używasz Oracle.

Pamiętaj, że jeśli masz wiele INSERT/UPDATE/DELETE, będziesz potrzebować zmiennej do przechowywania wyniku @@ROWCOUNTdla każdej operacji.


46

@@RowCount poda liczbę rekordów, na które ma wpływ instrukcja SQL.

@@RowCountDziała tylko wtedy, gdy wystawia go natychmiast potem. Więc jeśli wychwytujesz błędy, musisz to zrobić w tej samej linii. Jeśli to podzielisz, stracisz tę, którą umieścisz jako drugą.

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

Jeśli masz wiele instrukcji, będziesz musiał uchwycić liczbę wierszy, na które ma to wpływ, i dodać je.

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

33

Okazuje się, że SET NOCOUNT ONzostał ustawiony w skrypcie procedury składowanej (domyślnie w SQL Server Management Studio) i SqlCommand.ExecuteNonQuery();zawsze zwracał -1.

Po prostu to wyłączyłem: SET NOCOUNT OFFbez konieczności używania @@ROWCOUNT.

Więcej szczegółów można znaleźć tutaj: SqlCommand.ExecuteNonQuery () zwraca -1 podczas wykonywania operacji Wstaw / Aktualizuj / Usuń


To działa dla mnie. Mój zapisany proces to po prostu proste instrukcje wstawiania i wydaje się, że działa. dzięki!
Harvey Darvey

Dzięki! Dobra robota na referencji.
Leo Gurdian

8

W przypadku programu Microsoft SQL Server można zwrócić @@ROWCOUNTzmienną, aby zwrócić liczbę wierszy, na które ma wpływ ostatnia instrukcja procedury składowanej.



Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.