البرمجة

تحسين استعلام SQL للتحقق من عدم تكرار البيانات في جدول SADEV.RO_Transcript.ETQueueCtrl

في مجال إدارة قواعد البيانات وتطوير البرمجيات، يُعد تقييد إدراج البيانات في جدول موجود مسبقًا من أحد التحديات الشائعة. يتعامل الاستعلام الذي قدمته في مشكلة معينة حيث يتم إدراج البيانات إذا كانت غير موجودة بالفعل في الجدول، وإلا يتم تجاهلها.

لتحقيق هذا الهدف، يمكنك استخدام جملة INSERT INTO ... SELECT في SQL مع شرط NOT EXISTS للتحقق مما إذا كانت البيانات المراد إدراجها موجودة بالفعل في الجدول أم لا. يمكننا تحسين استعلامك بشكل يعكس هذا المفهوم.

في البداية، يمكنك استخدام الجملة NOT EXISTS للتحقق من عدم وجود السجل في الجدول المستهدف، ومن ثم إجراء عملية الإدراج بناءً على هذا الشرط. فيما يلي تحسين لاستعلامك:

sql
DECLARE @ident INT = IDENT_CURRENT('SADEV.RO_Transcript.ETQueueCtrl') INSERT INTO SADEV.RO_Transcript.ETQueueCtrl ([STU_ID], [STU_ORD_SEQ_NUM], [CreatedDate], [LastUpdatedDate], [ETQueueCtrlStatusCd], [ErrorFl]) SELECT STU_ID, STU_ORD_SEQ_NUM, GETDATE() AS CreatedDate, GETDATE() AS LastUpdatedDate, 'N' AS ETQueueCtrlStatusCd, 'N' AS ErrorFl FROM srdb_sr2_qa.dbo.SR0ROT rt WHERE STU_ORD_TYP_CD = 'A' AND ORD_DLVY_MTHD_CD = 'ET' AND STU_ORD_STAT_CD = 'C' AND ( @stu_ord_xpdt_fl = 'y' OR ( ORD_PEND_INST_CD = '' AND STU_ORD_SBM_DT + DATEADD(mi, 480, STU_ORD_SBM_TM) <= GETDATE() ) OR LAST_UPD_DT + DATEADD(mi, 480, LAST_UPD_TM) <= GETDATE() ) AND NOT EXISTS ( SELECT 1 FROM SADEV.RO_Transcript.ETQueueCtrl et WHERE et.STU_ID = rt.STU_ID AND et.STU_ORD_SEQ_NUM = rt.STU_ORD_SEQ_NUM ) SELECT et.ETQueueCtrlID, ro.STU_ID, ro.STU_ORD_SEQ_NUM, ty.CAREER_CD, ty.CAREER_SUFX_CD FROM SADEV.RO_Transcript.ETQueueCtrl et JOIN srdb_sr2_qa.dbo.SR0ROT ro ON et.STU_ID = ro.STU_ID AND et.STU_ORD_SEQ_NUM = ro.STU_ORD_SEQ_NUM LEFT JOIN srdb_sr2_qa.dbo.SR0TYT ty ON ro.STU_ID = ty.STU_ID WHERE et.ETQueueCtrlID > @ident

يقوم هذا الاستعلام بفحص وجود السجل في الجدول SADEV.RO_Transcript.ETQueueCtrl باستخدام NOT EXISTS قبل إدراجه، مما يمنع إدراج السجل إذا كان موجودًا بالفعل.

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

في هذا السياق، يعتبر الاستعلام الذي تم تقديمه جزءًا من عملية إدارة بيانات قاعدة البيانات حيث يتم تحديث جدول SADEV.RO_Transcript.ETQueueCtrl باستخدام البيانات المستخلصة من جدول srdb_sr2_qa.dbo.SR0ROT بناءً على مجموعة من الشروط المعينة.

أولاً وقبل كل شيء، يتم إعلان المتغير @ident الذي يستخدم لتخزين القيمة الحالية للهوية الأخيرة المُستخدمة في جدول SADEV.RO_Transcript.ETQueueCtrl. هذا يسمح بتتبع آخر هوية تم استخدامها وتحديدها، مما يسهل تحديد السجلات التي تم إدراجها حديثًا.

ثم يتم استخدام جملة INSERT INTO ... SELECT لاستخراج البيانات من جدول srdb_sr2_qa.dbo.SR0ROT بناءً على مجموعة من الشروط. يُستخدم عامل WHERE لتحديد السجلات المراد إدراجها باستناءٍ لبعض الشروط، وذلك باستخدام CASE لتحديد التاريخ المقارن بناءً على قيمة @stu_ord_xpdt_fl وحالة ORD_PEND_INST_CD.

لمنع إدراج نفس السجلات مرة أخرى في حال وجودها بالفعل في جدول SADEV.RO_Transcript.ETQueueCtrl، يُستخدم عبارة NOT EXISTS مع جملة SELECT داخلية للتحقق من عدم وجود السجل في الجدول المستهدف.

أخيرًا، يتم استرجاع مجموعة من الحقول من الجدول SADEV.RO_Transcript.ETQueueCtrl والجدولين srdb_sr2_qa.dbo.SR0ROT و srdb_sr2_qa.dbo.SR0TYT باستخدام جملة SELECT، مع استخدام JOIN لربط الجداول ببعضها البعض عبر المفاتيح المناسبة.

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

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

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

المحتوى محمي من النسخ !!