الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيف استطيع نسخ سجل من جدول ما مع كل السجلات

مغلق
بدأه DotNetExpert في 24 نوفمبر 2004 · 4 رد · 802 مشاهدة · في قواعد بيانات Microsoft SQL Server
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

لدي قاعدة بيانات تحتوي على عدد كبير جدا من الجداول وهذه الجداول مرتبطة معا بشكل كبير, اي كل جدول يحتوي على عدد من FK التي تؤشر على جداول من نفس القاعدة وهكذا.

والذي اريده هو نسخ سجل من احد الجداول الذي لا يحتوي على اي FK (اي انه يشكل بشكل ما جذرا لقاعدة البيانات تتفرع منه الجداول الاخرى) ضمن نفس الجدول ومن ثم نسخ السجلات التي تؤشر على السجل الاساسي وتغير قيمة الFK ضمن السجل الجديد المنسوخ حتى يدل على السجل المنسوخ من قاعدة البيانات الجذر , ومن ثم نسخ السجلات التي تدل على السجل المنسوخ من الجدول الثاني وهذا دواليك بشكل هرمي حتى نحصل على نسخة كاملة من الشجرة المتعلقة بالسجل الاساسي المنسوخ.

هل يعرف احد طريقة عملية لتنفيذ هذه المهمة مع العلم ان بنية الشجرة المنسوخة ليست ثابتة فقيم ال NULL مسموحة ضمن ال FK.

بالطبع ان انجاز هذه المهمة باستخدام T-SQL بشكل Hard coding لا يعتبر "عمليا".

تحياتي

وحدن بيبقو متل زهر البيلسان وحدهن بيقطفو وراق الزمان

بيسكرو الغابي بيضلهن متل الشتي يدقوا على بوابي على بوابي

يا زمان يا عشب داشر فوق هالحيطان ضويت ورد الليل عكتابي

برج الحمام مسور و عالي هج الحمام بقيت لحالي لحالي

يا ناطرين التلج ما عاد بدكن ترجعو صرخ عليهن بالشتي يا ديب بلكي بيسمعو

http://www.mazikana.com/Songs/F/Fayrouz/mp...uz---Wahdon.mp3

#2
اقتباس
بالطبع ان انجاز هذه المهمة باستخدام T-SQL بشكل Hard coding لا يعتبر "عمليا".

هذا ما فكرت به

و لكن لماذا لا تحاول البدأ من اسفل و من ثم الحصول على ال Parent Rows مثل استخدام GetParentRows فى الدوت نيت و التى ستقوم بارجاع مصفوفه من ال parent DataRow و من ثم نضع القيم الموجوده فى هذه المصفوفه فى جدول يمكننا تعديل بياناته لاحقاً(هذا حل نظرى لم اجربه)

تم تعديل هذه المشاركة بواسطة طارق إبراهيم في 24 نوفمبر 2004 في 21:54

Technical Lead Developer

My LinkedIn Profile

اللهم قنى شر الجهل و الجهلاء

( اقْتَرَبَ لِلنَّاسِ حِسَابُهُمْ وَهُمْ فِي غَفْلَةٍ مَّعْرِضُونَ ) {الأنبياء:1}

#3

المشكلة ان البيانات الموجودة في قاعدة البيانات كبير ةجدا جدا. وليس من العملي نقل كل هذه البيانات من قاعدة البيانات الى السرفر ومن ثم نسخها وارجعا.

لقد حزمنا امرنا في الشركة ووجدنا حلا ليس مثاليا لكنه يقوم بالمطلوب.

الآن سوف اذهب الى الجامعة بعد أن اعود سوف اكتب عن الحل بالتفصيل

شكرا لاستجابتك

وحدن بيبقو متل زهر البيلسان وحدهن بيقطفو وراق الزمان

بيسكرو الغابي بيضلهن متل الشتي يدقوا على بوابي على بوابي

يا زمان يا عشب داشر فوق هالحيطان ضويت ورد الليل عكتابي

برج الحمام مسور و عالي هج الحمام بقيت لحالي لحالي

يا ناطرين التلج ما عاد بدكن ترجعو صرخ عليهن بالشتي يا ديب بلكي بيسمعو

http://www.mazikana.com/Songs/F/Fayrouz/mp...uz---Wahdon.mp3

#4

اشكرك لمشاركتنا الحل لديكم و اتمنى ان نعرف منك الحل الذى استخدمتموه

Technical Lead Developer

My LinkedIn Profile

اللهم قنى شر الجهل و الجهلاء

( اقْتَرَبَ لِلنَّاسِ حِسَابُهُمْ وَهُمْ فِي غَفْلَةٍ مَّعْرِضُونَ ) {الأنبياء:1}

#5

اسف على التأخير. الحل هو كالتالي.

أولا قمنا بجعل المفتاح الرئيس لكل جدول متفرع عن الجدول الرئيسي بشكل مباشر او غير مباشر عبارة عن حقلين معا. الحقل الأول هو حقل عددي عادي(لكنه لا يولد تلقائيا من السرفر بل نقوم بتوليده ضمن الكود بطريقة ما) والحقل الثاني هو رقم ال id للجدول الجذر.

كمثال

tables.jpg

بالطبع ان قاعدة البيانات الحقيقة أكبر بكثير واعقد واكثر تشعبا بشكل كبير من المثال في الأعلى.

الآن عندما نريد نسخ سجل ما من الجدول Projects فعلينا فعل التالي

أولا نسخ السجل المطلوب ضمن الجدول والحصول على رقم ال id الجديد.

ثانيا نسخ السجلات من الجدول Countries التي تنتمي الى السجل الرئيسي الذي قمنا بنسخه مع تغير قيمة ProjID الي قيمة ID الجديد للسجل المنسوخ . مع الملاحظة أن رقم ال ID لسجل ال countries المنسوخ يبقى نفسه. الفرق بين السجل الرئيسي والسجل المنسوخ هو فقط ال ProjID.

ثالثا الانتقال الى جدول Cities نسخ جميع السجلات التي تشير في الحق ProjID الى السجل الرئيسي في جدول Projects دون الانتباه الي قيمة ال CountryID ومن ثم تغير ProjID اللى القيمة الجديدة. وهكذا لجميع الجداول

أي بالمختصر كل ما نقوم به هو ان نزور جميع الجداول التي تحتوي على ProjID ونقوم بنسخ جميع السجلات التي تشير الى السجل الرئيسي الذي اردنا نسخه مع تغير الProjID الى السجل الجديد المنسوخ.

ميزة هذه الطريقة أنها تتجاوز التعقيد الكبير الذي تسببه البنية الهرمية المتشعبة لقاعدة البيانات (في الحقية ان بنية قاعدة البيانات ليست هرمية تماما. فالكثير من الجداول تفرع عن جداول من طبقات مختلفة. أي انها اشبه ب graph)

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

تحياتي

وحدن بيبقو متل زهر البيلسان وحدهن بيقطفو وراق الزمان

بيسكرو الغابي بيضلهن متل الشتي يدقوا على بوابي على بوابي

يا زمان يا عشب داشر فوق هالحيطان ضويت ورد الليل عكتابي

برج الحمام مسور و عالي هج الحمام بقيت لحالي لحالي

يا ناطرين التلج ما عاد بدكن ترجعو صرخ عليهن بالشتي يا ديب بلكي بيسمعو

http://www.mazikana.com/Songs/F/Fayrouz/mp...uz---Wahdon.mp3

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…