تحسين استعلام SQL للتحقق من عدم تكرار البيانات في جدول SADEV.RO_Transcript.ETQueueCtrl
في مجال إدارة قواعد البيانات وتطوير البرمجيات، يُعد تقييد إدراج البيانات في جدول موجود مسبقًا من أحد التحديات الشائعة. يتعامل الاستعلام الذي قدمته في مشكلة معينة حيث يتم إدراج البيانات إذا كانت غير موجودة بالفعل في الجدول، وإلا يتم تجاهلها.
لتحقيق هذا الهدف، يمكنك استخدام جملة INSERT INTO ... SELECT
في SQL مع شرط NOT EXISTS
للتحقق مما إذا كانت البيانات المراد إدراجها موجودة بالفعل في الجدول أم لا. يمكننا تحسين استعلامك بشكل يعكس هذا المفهوم.
-
تصحيح عنوان URL لطلبات Ajax في Prestashop03/04/2024
-
Understanding JSONSerialization Options08/04/2024
في البداية، يمكنك استخدام الجملة NOT EXISTS
للتحقق من عدم وجود السجل في الجدول المستهدف، ومن ثم إجراء عملية الإدراج بناءً على هذا الشرط. فيما يلي تحسين لاستعلامك:
sqlDECLARE @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
لربط الجداول ببعضها البعض عبر المفاتيح المناسبة.
هذا الاستعلام يهدف إلى إدارة بيانات الجداول بشكل فعال، مع إجراء إدراج فقط للسجلات التي تلبي الشروط المحددة والتي ليست موجودة بالفعل في الجدول المستهدف.