عد عدد من حذف الصفوف في إجراء SQL Server المخزنة
-
05-07-2019 - |
سؤال
في SQL Server 2005, هل هناك طريقة لحذف الصفوف يقال كم كان فعلا حذفها ؟
أنا يمكن أن تفعل select count(*)
مع نفس الظروف ، ولكن أريد أن يكون هذا تماما بالثقة.
تخميني الأول هو استخدام @@ROWCOUNT
المتغيرات - ولكن هذا ليس مجموعة, على سبيل المثال
delete
from mytable
where datefield = '5-Oct-2008'
select @@ROWCOUNT
دائما بإرجاع 0.
MSDN يوحي OUTPUT
البناء مثلا ،
delete from mytable
where datefield = '5-Oct-2008'
output datefield into #doomed
select count(*)
from #doomed
هذا في الواقع فشل مع خطأ في بناء الجملة.
أي أفكار ؟
المحلول
هل حاولت SET NOCOUNT OFF
?
نصائح أخرى
يمكنني استخدام @@ROWCOUNT لهذا الغرض المحدد في SQL2000 مع أي قضايا.تأكد من أن كنت لا inadvertantly إعادة تعيين هذا العدد قبل التحقق من ذلك على الرغم من (بول:هذا المتغير هو تعيين إلى 0 قبل أي بيان أن لا عودة الصفوف ، مثل إذا كان البيان').
فقط تفعل هذا:
SET NOCOUNT off ;
SELECT @p1 = @@ROWCOUNT
حيث p1 هو إخراج المعلمة تعيين في الإجراء المخزن.آمل أن يساعد.
في المثال الخاص بك @@ROWCOUNT
أن العمل هو الطريق الصحيح إلى معرفة عدد من حذف صفوف.إذا كنت تحاول حذف شيء من التطبيق الخاص بك ثم سوف تحتاج إلى استخدام SET NOCOUNT ON
وفقا MSDN @@ROWCOUNT وظيفة تحديث حتى عندما SET NOCOUNT على النحو SET NOCOUNT
يؤثر فقط على الرسالة التي تحصل بعد التنفيذ.
حتى إذا كنت في محاولة للعمل مع نتائج @@ROWCOUNT
من ، على سبيل المثال ، ADO.NET ثم SET NOCOUNT ON
ينبغي أن تساعد بالتأكيد.
وجدت الحالة حيث لا يمكن استخدام @@rowcount
, مثل عندما كنت تريد أن تعرف متميزة عدد من القيم التي تم حذفها بدلا من الاعتماد الكلي.في هذه الحالة عليك أن تفعل ما يلي:
delete from mytable
where datefield = '5-Oct-2008'
output deleted.datefield into #doomed
select count(distinct datefield)
from #doomed
على خطأ في بناء الجملة في العملية كانت بسبب output
لم تشمل deleted
قبل datefield
اسم الحقل.
من باب الفضول كيف حالك استدعاء الإجراء ؟ (أنا على افتراض أنه هو تخزين الإجراء؟).سبب سؤالي هو أن هناك فرقا بين الإجراء المخزن إرجاع القيمة (التي ستكون 0 في هذه الحالة) ، و مجموعة الصفوف النتيجة-وهو في هذه الحالة يكون صف واحد مع عمود واحد.في ADO.Net السابق سيتم الوصول إليها من قبل المعلمة و هذا الأخير مع SqlDataReader.أنت ربما ظنا إجراءات عودة قيمة rowcount?
إنشاء temp طاولة واحدة مع عمود هوية.
تضاف إلى الجدول المؤقت اختيار المعرفات التي تريد حذفها.يعطيك الخاصة بك العد.
حذف من الجدول الخاص بك حيث الهوية في (تحديد الهوية من الجدول المؤقت)