Depolanan bir yordamdan etkilenen kayıtların sayısını nasıl alabilirim?


86

İçin INSERT, UPDATEve DELETEveritabanına karşı doğrudan çalıştırılan SQL ifadelerinde, en veritabanı sağlayıcıları etkilenen satırların sayısını döndürür. Depolanan yordamlar için, etkilenen kayıt sayısı her zaman olur -1.

Depolanan bir prosedürden etkilenen kayıtların sayısını nasıl elde ederiz?


1
Sayısız Ayarla da benim sorunumdu. Test etmek için, yönetim stüdyosunda saklı yordamınızı yürütün ve sayı alıp almadığınızı görün, varsa, bir çıktı değişkenine sahip olduğunuzdan emin olun.
user2624356

Yanıtlar:


80

Depolanan yordam için bir çıkış parametresi kaydedin ve değeri @@ROWCOUNTSQL Server kullanıp kullanmadığınıza göre ayarlayın . SQL%ROWCOUNTOracle kullanıyorsanız kullanın .

Birden fazla seçeneğiniz varsa INSERT/UPDATE/DELETE, @@ROWCOUNTher işlemin sonucunu saklamak için bir değişkene ihtiyacınız olacağını unutmayın .


46

@@RowCount size bir SQL İfadesinden etkilenen kayıtların sayısını verecektir.

@@RowCountEğer hemen ardından yayınlamayı yalnızca çalışır. Yani hataları yakalıyorsanız, bunu aynı satırda yapmanız gerekir. Eğer bölerseniz, hangisini ikinci koyarsanız kaçırırsınız.

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

Birden fazla ifadeniz varsa, her biri için etkilenen satır sayısını yakalamanız ve bunları toplamanız gerekecektir.

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

33

Benim için bunun SET NOCOUNT ONsaklı yordam komut dosyasında (varsayılan olarak SQL Server Management Studio'da) ayarlandığı ve SqlCommand.ExecuteNonQuery();her zaman -1 döndürdüğü ortaya çıktı.

Sadece kapattım: SET NOCOUNT OFFkullanmaya gerek kalmadan @@ROWCOUNT.

Daha fazla ayrıntı burada bulundu: SqlCommand.ExecuteNonQuery (), Ekle / Güncelle / Sil işlemi yaparken -1 döndürür


Bu benim için çalışıyor. Depolanan proc'um sadece basit bir ek deyim ve çalışıyor gibi görünüyor. Teşekkürler!
Harvey Darvey

Teşekkürler! Referans konusunda iyi iş çıkardın.
Leo Gurdian

8

Microsoft SQL Server @@ROWCOUNTiçin, saklı yordamdaki son ifadeden etkilenen satır sayısını döndürmek için değişkeni döndürebilirsiniz.



Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.