بعد ادخالك لقيمة في جدول , واردت الحصول علي رقم IDالاخير الذي قمت بادخاله بطريقة امنه في المشاريع الكبيرة ومقارنة بين select max,select top 1,SELECT SCOPE_IDENTITY()
نظرة عامة
هذا الموضوع تحتاجه كثيرا في فواتير البيع والشراء والمخازن وغيرها من العمليات الهامة التي لا تقبل اي اخطاء
فاذا قمنا بجملة ادخال عادية في جدول الفواتير مثلا
INSERT INTO Invoices (invoice_code) values('0001')
ادخلنا رقم فاتورة في حقل يسمي invoice_code
الان نريد ان نأتي بهذه القيمة كي نسجلها فورا
فاننا سوف نأتي بجملة استعلام وتأتي باخر سجل دخل في الجدول من خلال احدي الاوامر التالية
select max(id) from Invoices
select top 1(id) from Invoices
مشاكل ذلك
لكن ماذا اذا كان اكثر من مستخدم في نفس الوقت يقوم بالادخال في نفس الجدول فربما يأتي باخر قيمة في السجل وبالطبع قد يكون زميلك بالعمل قام بالضغط علي زر الحفظ قبلك وبالتالي ستأتي بقيمة مختلفة لاخر سجل دخل في الجدول .
الحل
في استخدام الادخال للجدول مع الاستعلام بطريقة امنه كالتالي
INSERT INTO Invoices (invoice_code) values('0001')
SELECT SCOPE_IDENTITY()
وبالتالي كتابتها كجملة واحدة فسوف يحدث امرين
1- سوف يتم ادخال القيمة في الجدول
2- سوف ترجع باخر قيمة دخلت الجدول وهي مثلا القيمة 5
حيث ان جملة SELECT SCOPE_IDENTITY()
ترجع باخر سجل دخل فورا حتي لو قام احد الزملاء بالضغط علي زر الحفظ قبلك في مكان اخر سوف يحفظ السشن الحالي لك او القيمة الحالية التي دخلت عن طريقك .
وهذه امن طريقة لحفظ الجدول والحصول علي قيمة اخر سجل في الجدول بعد الحفظ لنفس المستخدم وليس مستخدم اخر