أمر للحصول على هوية السجل الذي تم إدراجه حديثًا في Interbase 2007

StackOverflow https://stackoverflow.com/questions/3880042

سؤال

في interbase (أنا أستخدم 2007 ، لا أعرف ما إذا كان الأمر مهمًا) هل هناك أمر للحصول على هوية السجل الذي تم إدراجه حديثًا ، على غرار SCOPE_IDINGITITY () في SQL Server؟

هل كانت مفيدة؟

المحلول

لا ، Interbase ليس لديه بالفعل ميزة هوية.

ما لديه ، بدلاً من ذلك ، هو ميزة المولد. المولدات تشبه الهوية نوعًا ما ، لكن يتم فصلها منطقياً عن العمود الرئيسي. وبعبارة أخرى ، سوف يمنحك المولد قيمة فريدة مضمونة ، ولكن ما تفعله بهذه القيمة متروك لك.

يمكنك استخدام هذه القيمة كقيم المفاتيح الأساسية لجدول واحد ، أو لجداول متعددة. ولكن في الواقع تعيين قيمة المفتاح الأساسي هو شيء يجب عليك القيام به بنفسك.

بالإضافة إلى عدم وجود ميزة مثل SCOPE_IDENTITY, ، لا يحتوي interbase على أي نوع من الميزات لإرجاع القيم من INSERT بيان. لذلك لا يمكنك فقط الحصول على قيمة مفتاح أساسية تم إنشاؤها مرة أخرى من INSERT العبارة ، لا يمكنك أيضًا الحصول على أي قيم أخرى ، مثل القيم التي يحددها الزناد.

الحلول

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

DECLARE VARIABLE ID INTEGER;
BEGIN
    ID = SELECT GEN_ID(MY_GENERATOR, 1) FROM RDB$DATABASE;
    INSERT INTO MY_TABLE (ID, DESCRIPTION) VALUES (:ID, "Foo");

RDB$DATABASE هو جدول النظام الذي يحتوي على سجل واحد فقط. معرفة قيمة ID, ، يمكنك إعادته من بروك.

الحل الثاني هو SELECT السجل باستخدام مفتاح بديل وقراءة المعرف الذي تم إنشاؤه بهذه الطريقة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top