ينفورميكس:كيفية الحصول على معرف آخر إدخال سجل

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

  •  05-07-2019
  •  | 
  •  

سؤال

ما هي الطريقة الأكثر فعالية الحصول على قيمة المسلسل العمود بعد إدراج البيان ؟ أولا-هاء.أنا أبحث عن طريقة تكرار @@IDENTITY أو SCOPE_IDENTITY وظائف MS SQL

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

المحلول

ويتم تخزين قيمة إدراج التسلسلي الأخير في السجل SQLCA، كإدخال الثاني في مجموعة sqlerrd. الجواب براين هو الصحيح لESQL / C، ولكنك لم تذكر ما هي اللغة التي تستخدمها.

إذا كنت تكتب إجراء مخزن، يمكن العثور على القيمة على النحو التالي:

LET new_id = DBINFO('sqlca.sqlerrd1');

ويمكن أيضا أن تكون موجودة في $sth->{ix_sqlerrd}[1] في حالة استخدام DBI

وهناك متغيرات لغات أخرى / واجهات، ولكن أنا متأكد من أنك سوف تحصل على هذه الفكرة.

نصائح أخرى

ولقد رأيت هذا المستخدم.

if LOCAL_SQLCA^.sqlcode = 0 then
/ return serial */
  Result := LOCAL_SQLCA^.sqlerrd[1]
else
/* return error code */
  Result := -(Abs(LOCAL_SQLCA^.sqlcode));

لا أعتقد أن "كفاءة" هي الكلمة التي تبحث عنها هنا.إنها أكثر من سؤال من الدقة.أنا لست متأكدا من أنني يمكن أن نقوم بعمل أفضل من شرح ذلك أكثر من كتب SQL لكن عموما, إلا إذا كنت تعرف حقا ما تفعلونه ولها سبب محدد باستخدام @@الهوية ، استخدام SCOPE_IDENTITY.والسبب الأكثر وضوحا على ذلك هو أن @@الهوية لن يعود هوية أحدث سجل أضيفت من قبل البرنامج/sp/الخ إذا كان هناك الزناد تعلق على الطاولة.أيضا, قد يكون هناك مشكلات في ارتفاع حجم التطبيقات حيث اثنين من المعاملات التي تحدث في نفس الوقت وبعد أن تحدث...

  1. إدراج الخاص بك
  2. المستخدم الآخر إدراج
  3. عودة أخرى هوية المستخدم لك

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

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