إدراج/تحديث SQL Server 2005 دون استخدام الإجراءات المخزنة

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

سؤال

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

لقد وجدت السؤال السابق حول هذا الموضوع, لكنه يتعامل مع الإجراءات المخزنة التي أنا لا تستخدم.أود أن مجرد استخدام عادي SQL SELECT, INSERT و تحديث البيانات ما لم يكن هناك شيء أفضل المتاحة (دمج البيان لا يتوفر في SQL Server 2005).

اعتقد ان الفكرة العامة هي:

If the row is found
  update
else
  insert

كما لفحص صف وجود كيف مكلفة للقيام SELECT قبل استدعاء تحديث أو إدراج?أم أنه من الأفضل أن مجرد محاولة تحديث التحقق من عدد الصفوف المتأثرة ، ومن ثم القيام إدراج إذا كانت الصفوف المتأثرة 0?

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

المحلول

والطريقة الأكثر فعالية هو أن تفعل UPDATE، ثم القيام INSERT إذا @@rowcount صفر، <وأ href = "https://stackoverflow.com/questions/108403/solutions-for-insert-or-update-on خادم -sql # 108416 "> كما هو موضح في هذه سابقة الجواب .

نصائح أخرى

(أولا - أنا لن محاولة لتجنب الإجراءات المخزنة ، إذا لم يكن هناك سبب قوي.تعطي فائدة جيدة في معظم الحالات.)

يمكنك أن تفعل ذلك بهذه الطريقة:

  • إنشاء (المؤقتة) الجدول
  • ملء الصفوف
  • تشغيل التداخل الذي يحدد extisting الصفوف
  • تحديث الجدول الخاص بك معهم
  • تشغيل إلا أن تحدد الصفوف الجديدة
  • تشغيل عبارة insert مع هذه العناصر
  • قطرة/مسح (المؤقتة) الجدول

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

وفهم تماما أن مشاركتك كان بعنوان "SQL خادم 2005" ولكن أردت فقط أن التخلص من شيء لنتطلع إلى إذا / عند الترقية إلى SQL 2008. مايكروسوفت قد أضاف بيان MERGE الجديد الذي سوف تعطيك القدرة على كود بيان DML واحد أن يفعل كل من تحديث وإدراج. انها باردة جدا. لقد قمت حتى الآن لمقارنة الأداء والإدخال / الإخراج ولكن انه لشيء رائع لمجرد الحصول على أداة أخرى في الأدوات الخاصة بك.

إذا كنت دائما الذهاب الى:
* عدد الصفوف
* إدراج / تحديث على أساس نتيجة

لماذا لا بدلا من ذلك:
* حذف صف
* إدراج صف واحد

ونفس النتيجة وإتقانا.
وبقدر ما أعرف عند تحديث صف واحد - سيكلسرفير يقوم حذف / أدخل على أي حال (حيث كان موجودا)

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