كيفية استرجاع id القيم الجديدة المُدخلة داخل SQL بشكل آمن

عند العمل مع قواعد البيانات في SQL، تحتاج غالبًا إلى استرجاع المعرف الفريد لسجل جديد مُدخل. هذه النقطة مهمة بشكل خاص عند التعامل مع الجداول التي تحتوي على قيم يتم إنشاؤها تلقائيًا، مثل المفاتيح الأساسية. لكن كيف يمكنك الحصول على هذه القيمة بكفاءة مباشرة بعد الإدخال؟ في هذه التدوينة، سنكشف عن أفضل طريقة لتحقيق ذلك مع تجنب العثرات الشائعة.

التحدي: الوصول إلى معرفات السجلات الجديدة

تخيل أن لديك جدولًا في قاعدة بيانات SQL حيث تم ضبط أحد الأعمدة على توليد معرف (id) تلقائيًا عند الإدخال. بعد إضافة سجل إلى هذا الجدول، قد ترغب في إجراء عمليات إضافية تتطلب المعرف الفريد الذي أنشأته للتو. تكمن الحل في الطريقة التي ستستخدمها لاسترجاع ذلك المعرف بطريقة صحيحة.

الطرق الشائعة: @@IDENTITY المضللة

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

  • ما هو @@IDENTITY؟: يعيد آخر قيمة هوية تم إنشاؤها للجلسة الحالية، بغض النظر عن الجدول الذي تأتي منه.
  • المخاطر: إذا كانت هناك مشغلات على الجدول خلال عملية الإدخال، أو إذا تم الإدخال في جداول متعددة، فإن استخدام @@IDENTITY يمكن أن يؤدي إلى سلوك غير متوقع. قد تسترجع id من جدول آخر تمامًا!

الطريقة الموصى بها: استخدام SCOPE_IDENTITY()

لاسترجاع المعرف الخاص بالسجل الذي قمت بإدخاله للتو بشكل آمن، يجب عليك استخدام SCOPE_IDENTITY(). إليك لماذا يتم التوصية به:

  • آمن من الناحية النطاقية: على عكس @@IDENTITY، فإن SCOPE_IDENTITY() يعيد آخر قيمة هوية تم إنشاؤها لجدول معين ضمن نفس النطاق. وهذا يعني أنه حتى لو كانت هناك مشغلات موجودة، فلن يعيد معرفًا من تلك الجداول.
  • دقيق وموثوق: يضمن أن القيمة التي تسترجعها هي بالضبط المرتبطة بعملية INSERT الأخيرة.

كيفية استخدام SCOPE_IDENTITY()

إليك ملخص سريع حول كيفية استخدام SCOPE_IDENTITY() بشكل فعال:

  1. قم بعملية الإدخال: أولاً، قم بإدخال سجلك في الجدول.

    INSERT INTO YourTable (Column1, Column2) VALUES (Value1, Value2);
    
  2. استرجاع المعرف الجديد: مباشرة بعد جملة الإدخال، قم باستدعاء SCOPE_IDENTITY() للحصول على المعرف الجديد.

    DECLARE @NewID INT;
    SET @NewID = SCOPE_IDENTITY();
    
  3. استخدم المعرف الجديد: الآن، يمكنك استخدام @NewID لأي عمليات إضافية تحتاج إلى القيام بها مع السجل المُدخل حديثًا.

الخاتمة

يمكن أن يكون استرجاع id القيم المُدخلة حديثًا في SQL بسيطًا إذا استخدمت الطريقة الصحيحة. من خلال اختيار SCOPE_IDENTITY()، تضمن أن المعرف الذي تعمل معه آمن ومرتبط بمعاملتك الحالية، مما يجنبك المشكلات المحتملة التي قد تنشأ مع طرق أقل موثوقية مثل @@IDENTITY. تذكر دائمًا هذا للحفاظ على سلامة البيانات وتبسيط تفاعلات قاعدة البيانات الخاصة بك. برمجة سعيدة!