كيف يمكنني الحصول على عدد السجلات المتأثرة بإجراء مخزن؟
-
05-07-2019 - |
سؤال
ل 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، وليس البيان الفعلي!