تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
معلومة --- Identity و أخواتها
#1
كاتب الموضوع : BADRMEDIA



بسم الله الرحمن الرحيم

IDENTITY وأخواتها

IDENTITY المقصود به رقم الهوية للصف عن طريق هذا الحقل
بحيث يكون فريد غير متكرر ويتم توليده تلقائي بمجرد الإدخال للسجل
لذلك لن يسمح لك محرك قواعد البيانات إدخال بيانات فيه
فهو مسئوليته حيث هو من يضع فيه القيمة طبقاً لقاعدة التسلسل

بناءً على هذا الحقل تم ظهور عدة Functions (وظائف ) تقوم بخدمات حوله وهي

الوظيفة @@IDENTITY

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

كمثال :



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

SELECT @@IDENTITY AS NEW_ID

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

ثم بعد الإدخال استخدمنا الوظيفة @@IDENTITY لنعرف الرقم الذي تم إدخاله

طبعاً الاستفادة من هذه الوظيفة مهمة جدول فى الجدول المرتبطة وفى حالة التعامل مع جداول Master – Detail


}}}
تم الشكر بواسطة: سعود
#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


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



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


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم