تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
معلومة --- Identity و أخواتها
#2
في المثال السابق استخدمنا الوظيفة @@IDENTITY

تقوم بنفس وظيفتها أختها





الوظيفة SCOPE_IDENTITY()




كود :
INSERT INTO VB4ARAB (Visior,Section)
VALUES ('BADRMEDIA','DOTNET')

SELECT SCOPE_IDENTITY() AS NEW_ID


هناك فرق بين استخدام الاثنين مهم جداً


الدالة SCOPE_IDENTITY() من اسمها ففيها كلمة SCOPE
أي منظور فهي تعود بأخر IDENTITY تم إدراجه داخل المنظور وليس على مستوى العمل

أي عند استخدام إجرائية مخزنة سيتم إعادة آخر رقم لآخر جدول تمت عملية إضافة سجل جديد أي أن هذا التابع يعمل ضمن مجال محدد أي ضمن تابع أو إجرائية أو trigger


الدالة @@IDENTITY تعود بأخر رقم تم إدراجه على مستوي العمل

كفكرة : أثناء إضافتك لسجل عن طريق إجراء مخزن وحدث أنه أثناء الإضافة أضاف مستخدم أخر سجل فيه حقل تلقائي أيضاً

عندما تنادى أنت على SCOPE_IDENTITY() سيحصل على الرقم الخاص بالجدول الذى تتعامل معه أنت دون أن يهتم بالمستخدم الآخر – أن الرقم الذى سيعود سيكون ضمن جدول المنظور الذى هو فيه

لكن فى حالتنا هذه لو استخدمت الدالة @@IDENTITY ستعود برقم أخر رقم تلقائي تم توليده بعيداً عن جدولك أنت في حالة كما بينا لو أن مستخدم أخر أدخل سجل في جدول أخر أثناء إدخالك لسجلك


الفرق مهم بحيث لا تحدث مشاكل في البيانات

- تخيل أنك أدخلت بيانات رأس فاتورة ثم حصلت على الرقم التلقائي المولد بواسطة @@IDENTITY لكي تعطيه لتفاصيل الفاتورة – وعندما حصل عليه كان هناك مستخدم أدخل بيانات في جدول به حقل تلقائي
بمعنى انك عندما حصلت على الرقم المولد لم يكن رقمك الخاص بجدولك بل رقم خاص بجدول أخر وأنت أعطيته لجدول تفاصيل الفاتورة

إذن ستحصل مشكلة وهى أن تفاصيل الفاتورة لم تعد تابعة لرأس الفاتورة



===============================



الوظيفة IDENT_CURRENT('Table_Name')

وهى تقوم بالحصول على أخر رقم تم إعطاءه لجدول معين

ونستفيد منها هكذا


كود :
SELECT IDENT_CURRENT(VB4ARAB')

بذلك سنحصل على أخ رقم تلقائي تم إعطاءه لجدول VB4ARAB


}}}
تم الشكر بواسطة: سعود


الردود في هذا الموضوع
معلومة --- Identity و أخواتها - بواسطة Raggi Tech - 21-10-12, 04:48 PM
معلومة --- Identity و أخواتها - بواسطة Raggi Tech - 21-10-12, 04:49 PM


التنقل السريع :


يقوم بقرائة الموضوع: