دمج في (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 [, ...])
المعلمات
-
اسم جدول يحدد الجدول الذي يتم تعديله. يجب أن يكون الجدول المشار إليه جدول دلتا.
-
اسم مستعار للجدول الهدف. يجب ألا يتضمن الاسم المستعار قائمة أعمدة.
-
اسم جدول يحدد الجدول المصدر المراد دمجه في الجدول الهدف.
-
اسم مستعار للجدول المصدر. يجب ألا يتضمن الاسم المستعار قائمة أعمدة.
-
كيف يتم دمج الصفوف من علاقة واحدة مع صفوف علاقة أخرى. تعبير مع نوع إرجاع من BOOLEAN.
-
تعبير منطقي يجب أن يكون
true
لتلبيةWHEN MATCHED
أوWHEN NOT MATCHED
البند. matched_action
يمكن أن يكون هناك أي عدد من
WHEN MATCHED
البنود والبنودWHEN NOT MATCHED
لكل منها ، ولكن هناك حاجة إلى بند واحد على الأقل. يسمح بمطابقات متعددة عند حذف التطابقات دون قيد أو شرط (نظرا لأن الحذف غير المشروط ليس غامضا حتى إذا كانت هناك تطابقات متعددة).WHEN MATCHED
يتم تنفيذ البنود عندما يتطابق صف المصدر مع صف جدول مستهدف استنادا إلى شرط المطابقة. تحتوي هذه الجمل على الدلالات التالية.WHEN MATCHED
يمكن أن تحتوي البنود على إجراء واحدUPDATE
DELETE
وواحد على الأكثر. يقوم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
للحصول على بعض الأمثلة.