سؤال

في 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 طاولة واحدة مع عمود هوية.

تضاف إلى الجدول المؤقت اختيار المعرفات التي تريد حذفها.يعطيك الخاصة بك العد.

حذف من الجدول الخاص بك حيث الهوية في (تحديد الهوية من الجدول المؤقت)

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