[SQL Server] لماذا لا تسمي إجراءاتك “SP_”

من الشائع جدًا رؤية الإجراءات بالبادئة “SP_” ، بمجرد أن بدأت العمل مع قاعدة بيانات ، أخذتها كأحد معايير التسمية التي يجب أن أتبعها ، حتى علمت أنها قد تؤثر على تنفيذ هذه الإجراءات بطرق مختلفة. الغرض من هذا المنشور هو نقل هذه المعرفة.

عند تنفيذ إجراء يبدأ “SP_” ، يدرك SQL Server أن هذه العملية عبارة عن إجراء مخزن للنظام وينتقل أولاً إلى قاعدة بيانات MASTER للتحقق وجود هذا الإجراء ، وبعد ذلك فقط سيذهب إلى البنك الذي حدده المستخدم في التنفيذ. هذا يؤثر على أداء العملية الخاصة بك ، حتى لثوانٍ.

مشكلة أخرى يمكن أن تسبب عندما يكون اسم sp الخاص بك مطابقًا تمامًا لاسم إجراء النظام. المثال الذي سأحاكيه هو هذا بالضبط. لقد أنشأت إجراءً يسمى SP_HELP حيث طلبت إعادة رسالة مكتوبة “OI GUYS!” عندما تم تنفيذه.


كما ترى ، حتى تحديد قاعدة البيانات عند التنفيذ. ما تم تنفيذه بالفعل هو إجراء نظام master.dbo.sp_help.

ما المقصود بإجراء MASTER.DBO.SP_HELP؟

لعرض معلومات حول كائن قاعدة بيانات (أي كائن مدرج في عرض توافق sys. sysobjects).

هناك شيء يجب تسجيله أكثر في هذا المثال وهو الإشارة إلى الخطأ عند إنشاء الإجراء. حتى مع وجود الإشارات ، سمح SQL Server بالإنشاء دون مشاكل.
إذا قمت بتمرير الماوس فوق الجزء الذي تحته خط أحمر ، فسوف يعرض SQL رسالة تفيد بوجود كائن يحمل نفس الاسم بالفعل وأنه صحيح. ومع ذلك ، فإن السبب في عدم ظهور خطأ في وقت إنشائه هو أن الكائن الموجود بالفعل موجود في الكائن الرئيسي وليس في db الذي مررته.

تنصحنا وثائق Microsoft الخاصة بعدم استخدام SP باسم إجراءاتها.

تجنب استخدام البادئة sp_ عند تسمية الإجراءات. تستخدم SQL Server هذه البادئة لتعيين إجراءات النظام. قد يؤدي استخدام البادئة إلى تعطل رمز التطبيق إذا كان هناك إجراء نظام بنفس الاسم.

أتمنى أن أكون قد ساعدت.

السلام في أرض DBA! (: