دمج في (SQL داتابريك)

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

هذا البيان مدعوم فقط لجداول بحيرة دلتا.

بناء الجملة

MERGE INTO target_table_name [target_alias]
   USING source_table_reference [source_alias]
   ON merge_condition
   [ WHEN MATCHED [ AND condition ] THEN matched_action ] [...]
   [ WHEN NOT MATCHED [ AND condition ]  THEN not_matched_action ] [...]

matched_action
 { DELETE |
   UPDATE SET * |
   UPDATE SET { column1 = value1 } [, ...] }

not_matched_action
 { INSERT * |
   INSERT (column1 [, ...] ) VALUES (value1 [, ...])

المعلمات

  • target_table_name

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

  • target_alias

    اسم مستعار للجدول الهدف. يجب ألا يتضمن الاسم المستعار قائمة أعمدة.

  • source_table_reference

    اسم جدول يحدد الجدول المصدر المراد دمجه في الجدول الهدف.

  • source_alias

    اسم مستعار للجدول المصدر. يجب ألا يتضمن الاسم المستعار قائمة أعمدة.

  • merge_condition

    كيف يتم دمج الصفوف من علاقة واحدة مع صفوف علاقة أخرى. تعبير مع نوع إرجاع من BOOLEAN.

  • شرط

    تعبير منطقي يجب أن يكون true لتلبية WHEN MATCHED أو WHEN NOT MATCHED البند.

  • matched_action

    يمكن أن يكون هناك أي عدد من WHEN MATCHED البنود والبنود WHEN NOT MATCHED لكل منها ، ولكن هناك حاجة إلى بند واحد على الأقل. يسمح بمطابقات متعددة عند حذف التطابقات دون قيد أو شرط (نظرا لأن الحذف غير المشروط ليس غامضا حتى إذا كانت هناك تطابقات متعددة).

    • WHEN MATCHED يتم تنفيذ البنود عندما يتطابق صف المصدر مع صف جدول مستهدف استنادا إلى شرط المطابقة. تحتوي هذه الجمل على الدلالات التالية.
    • WHEN MATCHED يمكن أن تحتوي البنود على إجراء واحد UPDATEDELETE وواحد على الأكثر. يقوم UPDATE الإجراء في merge تحديث الأعمدة المحددة للصف الهدف المطابق فقط. DELETE سيؤدي الإجراء إلى حذف الصف المطابق.
    • يمكن أن يكون لكل WHEN MATCHED بند شرط اختياري. في حالة وجود شرط العبارة UPDATE هذا، يتم تنفيذ الإجراء أو DELETE لأي صف زوج من صفوف المصدر والهدف المطابق فقط عندما يكون شرط العبارة صحيحا.
    • إذا كانت هناك بنود متعددة WHEN MATCHED ، تقييمها بترتيب تحديدها (أي أن ترتيب البنود مهم). يجب أن يكون لجميع WHEN MATCHED البنود ، باستثناء البند الأخير ، شروط.
    • إذا كان لكلا البندين WHEN MATCHED شروط ولم يكن أي من الشرطين صحيحا بالنسبة لزوج صف مطابق بين المصدر والهدف، ترك صف الهدف المطابق دون تغيير.
    • لتحديث كافة أعمدة جدول دلتا الهدف بالأعمدة المقابلة لمجموعة البيانات المصدر، استخدم UPDATE SET *. وهذا يعادل UPDATE SET col1 = source.col1 [, col2 = source.col2 ...] كافة أعمدة جدول دلتا الهدف. لذلك، يفترض هذا الإجراء أن الجدول المصدر يحتوي على نفس الأعمدة الموجودة في الجدول الهدف، وإلا فإن الاستعلام سوف يلقي خطأ في التحليل.
  • WHEN NOT MATCHED يتم تنفيذ البنود عندما لا يتطابق صف المصدر مع أي صف مستهدف استنادا إلى شرط المطابقة. تحتوي هذه الجمل على الدلالات التالية.

    • WHEN NOT MATCHED يمكن أن يكون للبنود INSERT الإجراء فقط. يتم إنشاء الصف الجديد استنادا إلى العمود المحدد والتعبيرات المقابلة. لا يلزم تحديد كافة الأعمدة في الجدول الهدف. بالنسبة للأعمدة المستهدفة غير المحددة، NULL يتم إدراجها.

    • يمكن أن يكون لكل WHEN NOT MATCHED بند شرط اختياري. في حالة وجود شرط العبارة، يتم إدراج صف مصدر فقط إذا كان هذا الشرط صحيحا لهذا الصف. وإلا، يتم تجاهل العمود المصدر.

    • إذا كانت هناك بنود متعددة WHEN NOT MATCHED ، تقييمها بترتيب تحديدها (أي أن ترتيب البنود مهم). يجب أن يكون لجميع WHEN NOT MATCHED البنود ، باستثناء البند الأخير ، شروط.

    • لإدراج كافة أعمدة جدول دلتا الهدف مع الأعمدة المقابلة لمجموعة البيانات المصدر، استخدم INSERT *. وهذا يعادل INSERT (col1 [, col2 ...]) VALUES (source.col1 [, source.col2 ...]) كافة أعمدة جدول دلتا الهدف. لذلك، يفترض هذا الإجراء أن الجدول المصدر يحتوي على نفس الأعمدة الموجودة في الجدول الهدف، وإلا فإن الاستعلام سوف يلقي خطأ في التحليل.

      ملاحظة

      يتغير هذا السلوك عند تمكين الترحيل التلقائي للمخطط. راجع التطور التلقائي للمخطط للحصول على التفاصيل.

هام

يمكن أن تفشل عملية إذا تطابقت MERGE صفوف متعددة من مجموعة البيانات المصدر وحاولت تحديث نفس الصفوف من جدول دلتا الهدف. وفقا لدلالات SQL للدمج ، فإن عملية التحديث هذه غامضة لأنه من غير الواضح أي صف مصدر يجب استخدامه لتحديث الصف المستهدف المطابق. يمكنك معالجة الجدول المصدر مسبقا للقضاء على إمكانية وجود تطابقات متعددة. راجع مثال تغيير التقاط البيانات - يقوم بمعالجة مجموعة بيانات التغيير مسبقا (أي مجموعة البيانات المصدر) للاحتفاظ بأحدث تغيير فقط لكل مفتاح قبل تطبيق هذا التغيير في جدول دلتا الهدف.

أمثلة

يمكنك استخدامها MERGE INTO للعمليات المعقدة مثل إلغاء تكرار البيانات ، ورفع مستوى بيانات التغيير ، وتطبيق عمليات SCD Type 2 ، وما إلى ذلك. راجع MERGE INTO للحصول على بعض الأمثلة.