سؤال

وأريد أن تنفيذ الأمر UPDATE على مجموعة من السجلات، لكنه فشل، لأن بعض السجلات بعد التحديث من شأنه أن ينتهك عقبة الجدول. هل من الممكن لتحديث سجلات مناسبة فقط بطريقة أو بأخرى؟

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

المحلول

وسلوك تحديث كما كل شيء أو لا شيء حسب التصميم

ويمكنك إضافة أين بنود إلى الأمر تحديث الخاص بك للتحقق من جميع القيود ولكن هذا يؤدي إلى ازدواجية رمز، وليس شيئا جيدا

وماذا عن القيام التحديث صف واحد في وقت واحد باستخدام المؤشر أو CLR الحلقة؟

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

إطار CSLA لديه بعض الأشياء الجيدة عن هذا

نصائح أخرى

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

وتحتاج إلى إضافة القيود على شرط WHERE.

وإما أن أو تشغيل التحديث منفصل لكل خط، ولكن هذا لا يبدو وكأنه فكرة جيدة على الإطلاق.

لإضافة إلى بعض الإجابات نشرت بالفعل: قد تحتاج إلى استخدام استعلام فرعي في جملة WHERE. مثل (في الزائف رمز)

update mytable
set myfield = myval
where not exists (select from some table that would tell you if a constraint is violated for this row)

إذا أنت رمز آخر، وأنا قد تكون قادرة على مساعدتك أكثر من ذلك.

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