Як я можу отримати кількість записів, на які впливає збережена процедура?


86

Для INSERT, UPDATEі DELETEзаяви SQL , виконаних безпосередньо в базі даних, більшість постачальників баз даних повертає кількість порушених рядків. Для збережених процедур кількість записів завжди залежить -1.

Як ми отримуємо кількість записів, на які впливає збережена процедура?


1
Встановити без підрахунку також було моєю проблемою. Щоб протестувати, виконайте збережену процедуру в студії управління і перевірте, чи отримуєте ви підрахунки, якщо ви це зробите, то переконайтеся, що у вас є змінна виводу.
user2624356

Відповіді:


80

Зареєструйте параметр виходу для збереженої процедури та встановіть значення на основі @@ROWCOUNTвикористання SQL Server. Використовуйте, SQL%ROWCOUNTякщо ви використовуєте Oracle.

Майте на увазі, що якщо у вас декілька INSERT/UPDATE/DELETE, вам знадобиться змінна для зберігання результату @@ROWCOUNTдля кожної операції.


46

@@RowCount надасть вам кількість записів, на які впливає виписка SQL.

@@RowCountПрацює тільки якщо ви видаєте його відразу ж після цього. Отже, якщо ви виявляєте помилки, ви повинні робити це на одному рядку. Якщо ви розділите його, ви пропустите той, який ви поставите другим.

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

Якщо у вас декілька тверджень, вам доведеться зафіксувати кількість рядків, на які впливає кожен, і скласти їх.

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

33

Для мене виявляється, що це SET NOCOUNT ONбуло встановлено у скрипті збереженої процедури (за замовчуванням у SQL Server Management Studio) і SqlCommand.ExecuteNonQuery();завжди поверталось -1.

Я просто запустив це: SET NOCOUNT OFFбез потреби використовувати @@ROWCOUNT.

Детальніше тут: SqlCommand.ExecuteNonQuery () повертає -1 при виконанні Insert / Update / Delete


Це працює для мене. Мій збережений proc - це лише прості оператори вставки, і, здається, він працює. Дякую!
Harvey Darvey

Дякую! Хороша робота на довідці.
Лео Гардіан

8

Для Microsoft SQL Server ви можете повернути @@ROWCOUNTзмінну, щоб повернути кількість рядків, на які вплинув останній оператор у збереженій процедурі.



Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.