21-10-12, 04:49 PM
في المثال السابق استخدمنا الوظيفة @@IDENTITY
تقوم بنفس وظيفتها أختها
الوظيفة SCOPE_IDENTITY()
هناك فرق بين استخدام الاثنين مهم جداً
الدالة SCOPE_IDENTITY() من اسمها ففيها كلمة SCOPE
أي منظور فهي تعود بأخر IDENTITY تم إدراجه داخل المنظور وليس على مستوى العمل
أي عند استخدام إجرائية مخزنة سيتم إعادة آخر رقم لآخر جدول تمت عملية إضافة سجل جديد أي أن هذا التابع يعمل ضمن مجال محدد أي ضمن تابع أو إجرائية أو trigger
الدالة @@IDENTITY تعود بأخر رقم تم إدراجه على مستوي العمل
كفكرة : أثناء إضافتك لسجل عن طريق إجراء مخزن وحدث أنه أثناء الإضافة أضاف مستخدم أخر سجل فيه حقل تلقائي أيضاً
عندما تنادى أنت على SCOPE_IDENTITY() سيحصل على الرقم الخاص بالجدول الذى تتعامل معه أنت دون أن يهتم بالمستخدم الآخر – أن الرقم الذى سيعود سيكون ضمن جدول المنظور الذى هو فيه
لكن فى حالتنا هذه لو استخدمت الدالة @@IDENTITY ستعود برقم أخر رقم تلقائي تم توليده بعيداً عن جدولك أنت في حالة كما بينا لو أن مستخدم أخر أدخل سجل في جدول أخر أثناء إدخالك لسجلك
الفرق مهم بحيث لا تحدث مشاكل في البيانات
- تخيل أنك أدخلت بيانات رأس فاتورة ثم حصلت على الرقم التلقائي المولد بواسطة @@IDENTITY لكي تعطيه لتفاصيل الفاتورة – وعندما حصل عليه كان هناك مستخدم أدخل بيانات في جدول به حقل تلقائي
بمعنى انك عندما حصلت على الرقم المولد لم يكن رقمك الخاص بجدولك بل رقم خاص بجدول أخر وأنت أعطيته لجدول تفاصيل الفاتورة
إذن ستحصل مشكلة وهى أن تفاصيل الفاتورة لم تعد تابعة لرأس الفاتورة
===============================
الوظيفة IDENT_CURRENT('Table_Name')
وهى تقوم بالحصول على أخر رقم تم إعطاءه لجدول معين
ونستفيد منها هكذا
بذلك سنحصل على أخ رقم تلقائي تم إعطاءه لجدول VB4ARAB
تقوم بنفس وظيفتها أختها
الوظيفة 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
