Untuk INSERT
, UPDATE
dan DELETE
pernyataan 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?
Jawaban:
Daftarkan parameter keluar untuk prosedur tersimpan, dan setel nilai berdasarkan
@@ROWCOUNT
jika 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@@ROWCOUNT
setiap operasi.sumber
@@RowCount
akan memberi Anda jumlah record yang dipengaruhi oleh Pernyataan SQL.The
@@RowCount
bekerja 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
sumber
Ternyata bagi saya yang
SET NOCOUNT ON
ditetapkan dalam skrip prosedur tersimpan (secara default di SQL Server Management Studio) danSqlCommand.ExecuteNonQuery();
selalu dikembalikan -1.Saya baru saja mematikannya:
SET NOCOUNT OFF
tanpa perlu menggunakan@@ROWCOUNT
.Detail lebih lanjut ditemukan di sini: SqlCommand.ExecuteNonQuery () mengembalikan -1 saat melakukan Sisipkan / Perbarui / Hapus
sumber
Untuk Microsoft SQL Server, Anda dapat mengembalikan
@@ROWCOUNT
variabel untuk mengembalikan jumlah baris yang dipengaruhi oleh pernyataan terakhir dalam prosedur tersimpan.sumber
@@ ROWCOUNT
sumber
PERINGATAN:
@@ROWCOUNT
dapat mengembalikan data palsu jika tabel yang diubah memiliki pemicu menyertainya!The
@@ROWCOUNT
akan mengembalikan jumlah record dipengaruhi oleh TRIGGER, bukan pernyataan yang sebenarnya!sumber