![]() |
|
معلومة --- Identity و أخواتها - نسخة قابلة للطباعة +- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb) +-- قسم : قسم قواعد البيانات (http://vb4arb.com/vb/forumdisplay.php?fid=40) +--- قسم : قسم مقالات SQL SERVER (http://vb4arb.com/vb/forumdisplay.php?fid=84) +--- الموضوع : معلومة --- Identity و أخواتها (/showthread.php?tid=6608) |
معلومة --- Identity و أخواتها - RaggiTech - 21-10-12 كاتب الموضوع : BADRMEDIA
بسم الله الرحمن الرحيم IDENTITY وأخواتها IDENTITY المقصود به رقم الهوية للصف عن طريق هذا الحقل بحيث يكون فريد غير متكرر ويتم توليده تلقائي بمجرد الإدخال للسجل لذلك لن يسمح لك محرك قواعد البيانات إدخال بيانات فيه فهو مسئوليته حيث هو من يضع فيه القيمة طبقاً لقاعدة التسلسل بناءً على هذا الحقل تم ظهور عدة Functions (وظائف ) تقوم بخدمات حوله وهي الوظيفة @@IDENTITY يقوم بالحصول على الرقم الذي تم إعطاءه للصف بعد تكوينه بجملة الإدخال كمثال : كود : INSERT INTO VB4ARAB (Visior,Section)هنا أدخلنا صف جديد للجدول VB4ARAB مع الأخذ فى الاعتبار أن الحقل المعرف وهو ID لم نرسل له قيمة لأنه يتم إعطاءه رقم تلقائي لذلك لن يسمح لنا إعطاءه قيمة ثم بعد الإدخال استخدمنا الوظيفة @@IDENTITY لنعرف الرقم الذي تم إدخاله طبعاً الاستفادة من هذه الوظيفة مهمة جدول فى الجدول المرتبطة وفى حالة التعامل مع جداول Master – Detail معلومة --- Identity و أخواتها - RaggiTech - 21-10-12 في المثال السابق استخدمنا الوظيفة @@IDENTITY تقوم بنفس وظيفتها أختها الوظيفة SCOPE_IDENTITY() كود : INSERT INTO VB4ARAB (Visior,Section)هناك فرق بين استخدام الاثنين مهم جداً الدالة SCOPE_IDENTITY() من اسمها ففيها كلمة SCOPE أي منظور فهي تعود بأخر IDENTITY تم إدراجه داخل المنظور وليس على مستوى العمل أي عند استخدام إجرائية مخزنة سيتم إعادة آخر رقم لآخر جدول تمت عملية إضافة سجل جديد أي أن هذا التابع يعمل ضمن مجال محدد أي ضمن تابع أو إجرائية أو trigger الدالة @@IDENTITY تعود بأخر رقم تم إدراجه على مستوي العمل كفكرة : أثناء إضافتك لسجل عن طريق إجراء مخزن وحدث أنه أثناء الإضافة أضاف مستخدم أخر سجل فيه حقل تلقائي أيضاً عندما تنادى أنت على SCOPE_IDENTITY() سيحصل على الرقم الخاص بالجدول الذى تتعامل معه أنت دون أن يهتم بالمستخدم الآخر – أن الرقم الذى سيعود سيكون ضمن جدول المنظور الذى هو فيه لكن فى حالتنا هذه لو استخدمت الدالة @@IDENTITY ستعود برقم أخر رقم تلقائي تم توليده بعيداً عن جدولك أنت في حالة كما بينا لو أن مستخدم أخر أدخل سجل في جدول أخر أثناء إدخالك لسجلك الفرق مهم بحيث لا تحدث مشاكل في البيانات - تخيل أنك أدخلت بيانات رأس فاتورة ثم حصلت على الرقم التلقائي المولد بواسطة @@IDENTITY لكي تعطيه لتفاصيل الفاتورة – وعندما حصل عليه كان هناك مستخدم أدخل بيانات في جدول به حقل تلقائي بمعنى انك عندما حصلت على الرقم المولد لم يكن رقمك الخاص بجدولك بل رقم خاص بجدول أخر وأنت أعطيته لجدول تفاصيل الفاتورة إذن ستحصل مشكلة وهى أن تفاصيل الفاتورة لم تعد تابعة لرأس الفاتورة =============================== الوظيفة IDENT_CURRENT('Table_Name') وهى تقوم بالحصول على أخر رقم تم إعطاءه لجدول معين ونستفيد منها هكذا كود : SELECT IDENT_CURRENT(VB4ARAB')بذلك سنحصل على أخ رقم تلقائي تم إعطاءه لجدول VB4ARAB |