تقييم الموضوع :
- 0 أصوات - بمعدل 0
- 1
- 2
- 3
- 4
- 5
معلومة --- Identity و أخواتها
|
المشاركات : 2,523
المواضيع 707
الإنتساب : Sep 2012
السمعة :
48
الشكر: 91
تم شكره 1103 مرات في 296 مشاركات
كاتب الموضوع : BADRMEDIA
بسم الله الرحمن الرحيم
IDENTITY وأخواتها
IDENTITY المقصود به رقم الهوية للصف عن طريق هذا الحقل
بحيث يكون فريد غير متكرر ويتم توليده تلقائي بمجرد الإدخال للسجل
لذلك لن يسمح لك محرك قواعد البيانات إدخال بيانات فيه
فهو مسئوليته حيث هو من يضع فيه القيمة طبقاً لقاعدة التسلسل
بناءً على هذا الحقل تم ظهور عدة Functions (وظائف ) تقوم بخدمات حوله وهي
الوظيفة @@IDENTITY
يقوم بالحصول على الرقم الذي تم إعطاءه للصف بعد تكوينه بجملة الإدخال
كمثال :
كود :
INSERT INTO VB4ARAB (Visior,Section)
VALUES ('BADRMEDIA','DOTNET')
SELECT @@IDENTITY AS NEW_ID
هنا أدخلنا صف جديد للجدول VB4ARAB مع الأخذ فى الاعتبار أن الحقل المعرف وهو ID لم نرسل له قيمة لأنه يتم إعطاءه رقم تلقائي لذلك لن يسمح لنا إعطاءه قيمة
ثم بعد الإدخال استخدمنا الوظيفة @@IDENTITY لنعرف الرقم الذي تم إدخاله
طبعاً الاستفادة من هذه الوظيفة مهمة جدول فى الجدول المرتبطة وفى حالة التعامل مع جداول Master – Detail
المشاركات : 2,523
المواضيع 707
الإنتساب : Sep 2012
السمعة :
48
الشكر: 91
تم شكره 1103 مرات في 296 مشاركات
في المثال السابق استخدمنا الوظيفة @@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
|
المواضيع المحتمل أن تكون متشابهة . |
الموضوع : |
الكاتب |
الردود : |
المشاهدات : |
آخر رد |
|
معلومة ---- Unicode ---------- |
RaggiTech |
0 |
2,322 |
21-10-12, 07:00 PM
آخر رد: RaggiTech
|
|
معلومة --- دالة coalesce --- |
RaggiTech |
0 |
3,490 |
21-10-12, 06:49 PM
آخر رد: RaggiTech
|
|
معلومة --- القوادح Triggers |
RaggiTech |
3 |
6,224 |
21-10-12, 06:48 PM
آخر رد: RaggiTech
|
|
معلومة --- البحث الصوتي مع الدالة --- Difference & soundex --- مهم جداً |
RaggiTech |
4 |
3,446 |
21-10-12, 05:51 PM
آخر رد: RaggiTech
|
|
معلومة --- الأمر Truncate |
RaggiTech |
0 |
2,192 |
21-10-12, 05:35 PM
آخر رد: RaggiTech
|
|
معلومة --- اعلامك بريدياً بتوقف SQL Server خطيرة جداً |
RaggiTech |
1 |
2,452 |
21-10-12, 05:16 PM
آخر رد: RaggiTech
|
|
معلومة --- Word Count |
RaggiTech |
1 |
2,368 |
21-10-12, 05:08 PM
آخر رد: RaggiTech
|
|
معلومة --- Stored Procedure |
RaggiTech |
3 |
4,212 |
21-10-12, 05:07 PM
آخر رد: RaggiTech
|
|
معلومة --- SQL Server 2008 |
RaggiTech |
0 |
2,231 |
21-10-12, 05:00 PM
آخر رد: RaggiTech
|
|
معلومة --- Openrowset --- هامة للغاية |
RaggiTech |
4 |
2,834 |
21-10-12, 04:53 PM
آخر رد: RaggiTech
|
يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم