البرمجة

استخدام هيكل التكرار في SQL لإدراج بيانات متعددة في جدول واحد

عندما نتحدث عن الاستفسارات البيانية في قاعدة البيانات وتحليل البيانات، يأتي لغة SQL إلى الأذهان كأداة قوية وفعّالة. في الكود الذي قدمته، يظهر أنك تحاول إدراج صفوف من استعلام آخر في صف واحد يتم بعد ذلك إدراجه في جدول آخر. واجهت تحدياً عندما تكون هناك أكثر من صف يتم إرجاعه من الاستعلام الأول.

لتحقيق هذا الهدف، يمكن استخدام هيكل تكرار (Loop) للتعامل مع متغيرات عدد الصفوف المسترجعة. ومع ذلك، يبدو أن محاولتك في استخدام while لم تكن ناجحة. بدلاً من ذلك، يمكن استخدام تعبير foreach لتحقيق هذا الهدف.

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

sql
-- تعريف المتغيرات declare @cn as int, @i as int set @cn = 569 declare @dM table(dM varchar(max)) declare @rowNum table (rowNum int) set @i = 0 -- إدراج عدد الصفوف المسترجعة في جدول مؤقت insert @rowNum exec ('select count(*) from table1 where c = ' + @cn) -- فحص إذا كانت هناك أكثر من صف if (select rowNum from @rowNum) > 1 begin -- إدراج الصفوف في جدول مؤقت insert @dM exec ('select d.d + '' '' + o.o + '' '' + d.v as rtM from table where c = ' + @countNumber) -- استخدام هيكل التكرار foreach لتكرار عملية الإدراج لكل صف foreach rtM in (select dM from @dM) begin insert into table2 (cn, rtM, idate) select @cn ,'Message is: ' + rtM + ' - the message.' ,cz.idate + ' ' + qw.txt from table3 as cz inner join table4 as qw on cz.id = qw.id where cz.cn = @cn end end else begin -- إدراج صف واحد فقط إذا كان هناك صف واحد insert @dM exec ('select d.d + '' '' + o.o + '' '' + d.v as rtM from table where c = ' + @countNumber) insert into table2 (cn, rtM, idate) select @cn ,'Message is: ' + (select dM from @dM) + ' - the message.' ,cz.idate + ' ' + qw.txt from table3 as cz inner join table4 as qw on cz.id = qw.id where cz.cn = @cn end

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

المزيد من المعلومات

في هذا السياق، يظهر أنك تعمل على تطوير استعلام SQL يستهدف العمليات البيانية في قاعدة البيانات الخاصة بك. يعتمد الكود الذي قدمته على استخدام المتغيرات والجداول المؤقتة للتحكم في تدفق البيانات وتحديد عدد الصفوف المسترجعة.

تستخدم المتغيرات @cn و @i لتحديد العدد المستهدف ومتغير التكرار على التوالي. يتم تحديد عدد الصفوف المسترجعة من الجدول table1 ويتم تخزينه في جدول مؤقت @rowNum. ثم يتم فحص إذا كان هناك أكثر من صف واحد.

إذا كان هناك أكثر من صف، يتم إجراء استعلام آخر للحصول على البيانات المراد إدراجها (rtM) وتخزينها في جدول مؤقت @dM. بعد ذلك، يستخدم هيكل التكرار foreach لتكرار عملية الإدراج لكل قيمة في rtM.

إذا كان هناك صف واحد فقط، يتم إجراء نفس الخطوات، ولكن دون استخدام هيكل التكرار، حيث يتم إدراج القيمة المسترجعة مباشرة في الجدول النهائي table2.

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

مقالات ذات صلة

زر الذهاب إلى الأعلى
إغلاق

أنت تستخدم إضافة Adblock

يرجى تعطيل مانع الإعلانات حيث أن موقعنا غير مزعج ولا بأس من عرض الأعلانات لك فهي تعتبر كمصدر دخل لنا و دعم مقدم منك لنا لنستمر في تقديم المحتوى المناسب و المفيد لك فلا تبخل بدعمنا عزيزي الزائر