كيف يمكنني الحصول على عدد السجلات المتأثرة بإجراء مخزن؟

StackOverflow https://stackoverflow.com/questions/1201358

سؤال

ل INSERT, UPDATE و DELETE يتم تنفيذ عبارات SQL مباشرة على قاعدة البيانات، ويقوم معظم موفري قواعد البيانات بإرجاع عدد الصفوف المتأثرة.بالنسبة للإجراءات المخزنة، يكون عدد السجلات المتأثرة دائمًا -1.

كيف نحصل على عدد السجلات المتأثرة بالإجراء المخزن؟

هل كانت مفيدة؟

المحلول

وسجل معلمة خارج الإجراء المخزن، وتعيين القيمة على أساس @@ROWCOUNT إذا تستخدم SQL Server. استخدام SQL%ROWCOUNT إذا كنت تستخدم Oracle.

والعقل أنه إذا كان لديك INSERT/UPDATE/DELETE متعددة، عليك ان تحصل على متغير لتخزين النتيجة من @@ROWCOUNT لكل عملية.

نصائح أخرى

و@@RowCount سوف تعطيك عدد السجلات التي تأثرت بيان SQL.

وو@@RowCount يعمل فقط إذا كنت إصداره بعد ذلك على الفور. لذلك إذا كنت محاصرة الأخطاء، لديك للقيام بذلك على نفس الخط. إذا كنت تقسيم عنه، وسوف تفوت على أي واحد كنت وضعت الثانية.

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

إذا كان لديك عبارات متعددة، سيكون لديك للقبض على عدد من الصفوف المتأثرة لكل واحد وإضافة لهم.

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

وتبين بالنسبة لي كان من المقرر أن SET NOCOUNT ON في البرنامج النصي الإجراء المخزن (افتراضيا على SQL Server إدارة Studio) وSqlCommand.ExecuteNonQuery(); عاد دائما -1.

وأنا فقط تفجيره: SET NOCOUNT OFF دون الحاجة إلى استخدام @@ROWCOUNT

ومزيد من التفاصيل العثور عليها هنا: <لأ href = "http://blogs.msdn.com/b/spike/archive/2009/01/27/sqlcommand-executenonquery-returns-1-when-doing-insert-update -delete.aspx "يختلط =" noreferrer "> SqlCommand.ExecuteNonQuery () إرجاع -1 عند القيام إدراج / تحديث / حذف

لمايكروسوفت SQL Server يمكن أن يعود في هذا المتغير @@ROWCOUNT لإرجاع عدد الصفوف التي تأثرت العبارة الأخيرة في الإجراء المخزن.

تحذير: @@ROWCOUNT قد يعود زائف البيانات إذا كان الجدول الذي يتم تغييره يحتوي على محفزات أضفها له!

ال @@ROWCOUNT سيُرجع عدد السجلات المتأثرة بالـ TRIGGER، وليس البيان الفعلي!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top