Bagaimana saya bisa mendapatkan jumlah rekaman yang dipengaruhi oleh prosedur tersimpan?


86

Untuk INSERT, UPDATEdan DELETEpernyataan SQL dijalankan langsung terhadap database, sebagian besar penyedia database mengembalikan jumlah baris yang terpengaruh. Untuk prosedur yang tersimpan, jumlah record yang terpengaruh selalu -1.

Bagaimana kita mendapatkan jumlah rekaman yang dipengaruhi oleh prosedur tersimpan?


1
Set No Count adalah masalah saya juga. Untuk mengujinya, jalankan prosedur tersimpan Anda di studio manajemen dan lihat apakah Anda mendapatkan hitungan, jika Anda melakukannya, pastikan Anda memiliki variabel keluaran.
pengguna2624356

Jawaban:


80

Daftarkan parameter keluar untuk prosedur tersimpan, dan setel nilai berdasarkan @@ROWCOUNTjika menggunakan SQL Server. MenggunakanSQL%ROWCOUNT jika Anda menggunakan Oracle.

Ingatlah bahwa jika Anda memiliki banyak INSERT/UPDATE/DELETE, Anda memerlukan variabel untuk menyimpan hasil dari @@ROWCOUNTsetiap operasi.


46

@@RowCount akan memberi Anda jumlah record yang dipengaruhi oleh Pernyataan SQL.

The @@RowCountbekerja hanya jika Anda mengeluarkan segera setelah itu. Jadi jika Anda menjebak kesalahan, Anda harus melakukannya di baris yang sama. Jika Anda membaginya, Anda akan kehilangan yang mana pun yang Anda tempatkan kedua.

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

Jika Anda memiliki beberapa pernyataan, Anda harus menangkap jumlah baris yang terpengaruh untuk masing-masing pernyataan dan menjumlahkannya.

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

33

Ternyata bagi saya yang SET NOCOUNT ONditetapkan dalam skrip prosedur tersimpan (secara default di SQL Server Management Studio) danSqlCommand.ExecuteNonQuery(); selalu dikembalikan -1.

Saya baru saja mematikannya: SET NOCOUNT OFFtanpa perlu menggunakan @@ROWCOUNT.

Detail lebih lanjut ditemukan di sini: SqlCommand.ExecuteNonQuery () mengembalikan -1 saat melakukan Sisipkan / Perbarui / Hapus


Ini berhasil untuk saya. Proc saya yang disimpan hanyalah pernyataan penyisipan sederhana, dan tampaknya berfungsi. Terima kasih!
Harvey Darvey

Terima kasih! Kerja bagus di referensi.
Leo Gurdian

8

Untuk Microsoft SQL Server, Anda dapat mengembalikan @@ROWCOUNTvariabel untuk mengembalikan jumlah baris yang dipengaruhi oleh pernyataan terakhir dalam prosedur tersimpan.



Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.