أنا مرتبك بشأن بعض النقاط:
ما هو الفرق بين الإجراء المخزن وطريقة العرض؟
متى يجب علي استخدام الإجراءات المخزنة ومتى يجب استخدام طرق العرض في SQL Server؟
هل تسمح طرق العرض بإنشاء استعلامات ديناميكية حيث يمكننا تمرير المعلمات؟
أيهما الأسرع ، وعلى أي أساس أسرع من الآخر؟
هل تخصص طرق العرض أو الإجراءات المخزنة الذاكرة بشكل دائم؟
ماذا يعني أن يقول شخص ما إن طرق العرض تنشئ جدولًا افتراضيًا ، بينما تنشئ الإجراءات جدول مواد؟
واسمحوا لي أن أعرف المزيد من النقاط ، إذا كان هناك أي.
يمثل العرض الظاهري الجدول. يمكنك ربط جداول متعددة في طريقة عرض واستخدام طريقة العرض لتقديم البيانات كما لو كانت البيانات تأتي من جدول واحد.
يستخدم الإجراء المخزن المعلمات للقيام بوظيفة ... سواء كانت تقوم بتحديث وإدراج بيانات ، أو إرجاع قيم مفردة أو مجموعات بيانات.
إنشاء طرق العرض والإجراءات المخزنة - لديه بعض المعلومات من Microsoft حول متى وسبب استخدام كل منها.
قل لدي جدولان:
tbl_user الأعمدة: .user_id ، .user_name ، .user_pw
tbl_profile الأعمدة: .profile_id ، .user_id .profile_description
لذلك إذا وجدت نفسي أستفسر من هذه الجداول كثيرًا ... بدلاً من القيام بالانضمام إلى كل تقريبًا من sql ، سأحدد طريقة عرض مثل:
CREATE View vw_user_profile
AS
Select A.user_id, B.profile_description
FROM tbl_user A left join tbl_profile B on A.user_id = b.user_id
GO
إذاً في المستقبل إذا كنت أرغب في الاستعلام عن profile_description حسب معرف المستخدم ... كل ما يجب علي فعله هو
SELECT profile_description FROM vw_user_profile WHERE user_id = @ID
يمكن استخدام رمز ذلك في إجراء مخزن مثل:
create procedure dbo.getDesc
@ID int
AS
begin
SELECT profile_description FROM vw_user_profile WHERE user_id = @ID
END
GO
حتى في وقت لاحق يمكنني الاتصال
dbo.getDesc 25
وسأحصل على وصف معرف المستخدم 25. حيث 25 هو المعلمة الخاصة بك.
من الواضح أن هناك الكثير من التفاصيل ، ولكن هذه هي الفكرة الأساسية فقط.
الكثير من المعلومات المتاحة على شبكة الإنترنت مثل هذا
هنا ملخص جيد:
إجراء مخزّن:
طريقة عرض:
تحتاج أولاً إلى فهم كلاهما أشياء مختلفة. يتم استخدام الإجراءات المخزنة بشكل أفضل في عبارات INSERT-UPDATE-DELETE. وتستخدم طرق العرض لبيانات SELECT. ويجب عليك استخدام كليهما.
في طرق العرض ، لا يمكنك تغيير البيانات. تحتوي بعض قواعد البيانات على طرق عرض قابلة للتحديث حيث يمكنك استخدام INSERT-UPDATE-DELETE في طرق العرض.
طريقة عرض SQL هي جدول افتراضي يستند إلى استعلام SQL SELECT. تشير طريقة العرض إلى جدول قاعدة بيانات واحد أو أكثر أو طرق عرض أخرى. إنها اللقطة الإضافية لقاعدة البيانات في حين أن الإجراء المخزن هو مجموعة من عبارات SQL للعمليات المترجمة في خطة تنفيذ واحدة.
طريقة العرض "عرض بسيط" لعرض البيانات المخزنة في جداول قاعدة البيانات في حين أن الإجراء المخزن هو مجموعة من العبارات التي يمكن تنفيذها.
طريقة العرض أسرع لأنها تعرض بيانات من الجداول المشار إليها في حين أن إجراء مخزن ينفذ عبارات sql.
التحقق من هذه المادة: عرض مقابل الإجراءات المخزنة . بالضبط ما تبحث عنه
طريقة العرض هي طريقة بسيطة لحفظ SELECT
معقدة في قاعدة البيانات.
يتم استخدام إجراء مخزن عندما لا تكون SQL بسيطة فقط. إجراءات المتجر تحتوي على متغيرات ، حلقات ومكالمات إلى الإجراءات المخزنة الأخرى. إنها لغة برمجة ، وليست لغة استعلام.
المشاهدات ثابتة. فكر في هذه الجداول كجداول جديدة ذات تخطيط معين ويتم إنشاء البيانات الموجودة بها بسرعة أثناء استخدام الاستعلام الذي قمت بإنشائه به. كما هو الحال مع أي جدول SQL ، يمكنك فرزه وتصفيته باستخدام WHERE
و GROUP BY
و ORDER BY
.
يعتمد على ما تفعله.
يعتمد على قاعدة البيانات. طرق العرض البسيطة فقط قم بتشغيل الاستعلام وتصفية النتيجة. لكن قواعد البيانات مثل أوراكل تسمح بإنشاء طريقة عرض "مجسَّدة" وهي في الأساس جدول يتم تحديثه تلقائيًا عندما تتغير البيانات الأساسية للعرض.
تتيح لك طريقة العرض الملموسة إنشاء فهارس على أعمدة العرض (خاصة على الأعمدة المحسوبة التي لا توجد في أي مكان في قاعدة البيانات).
أنا لا أفهم ما الذي تتحدث عنه.
الاختلاف الرئيسي هو أنه عند الاستعلام عن طريقة عرض ، يتم لصق التعريف في استعلامك. قد يعطي الإجراء أيضًا نتائج الاستعلام ، لكنه يتم تجميعه وبسرعة أكبر. خيار آخر هو وجهات النظر مفهرسة ..
ماهيش غير صحيح تمامًا عندما يشير إلى أنه لا يمكنك تغيير البيانات في طريقة عرض. لذلك مع وجهة نظر باتريك
CREATE View vw_user_profile AS
Select A.user_id, B.profile_description
FROM tbl_user A left join tbl_profile B on A.user_id = b.user_id
يمكنني تحديث البيانات ... كمثال يمكنني القيام بأي من هذه ...
Update vw_user_profile Set profile_description='Manager' where user_id=4
أو
Update tbl_profile Set profile_description='Manager' where user_id=4
لا يمكنك إدراج هذا العرض نظرًا لعدم وجود جميع الحقول الموجودة في الجدول بأكمله ، وأفترض أن PROFILE_ID هو المفتاح الأساسي ولا يمكن أن يكون NULL. ومع ذلك يمكنك في بعض الأحيان إدراج في طريقة عرض ...
قمت بإنشاء طريقة عرض على جدول موجود باستخدام ...
Create View Junk as SELECT * from [TableName]
ثم
Insert into junk (Code,name) values
('glyn','Glyn Roberts'),
('Mary','Maryann Roberts')
و
DELETE from Junk Where ID>4
كل من INSERT و DELETE عملت في هذه الحالة
من الواضح أنه لا يمكنك تحديث أي حقول مجمعة أو محسوبة ولكن أي طريقة عرض بشكل مستقيم يجب أن تكون قابلة للتحديث.
إذا كان العرض يحتوي على أكثر من جدول واحد ، فلن تتمكن من الإدراج أو الحذف ، ولكن إذا كان العرض مجموعة فرعية من جدول واحد فقط ، فيمكنك عادةً ذلك.
بالإضافة إلى التعليقات الواردة أعلاه ، أود إضافة نقاط قليلة حول المشاهدات.
Patrick صحيح مع ما قاله ، ولكن للإجابة على أسئلتك الأخرى ، ستنشئ طريقة العرض في الذاكرة ، واعتمادًا على نوع الانضمام والبيانات وإذا كان هناك أي تجميع قد يتم ، فقد يكون عرضًا جائعًا تمامًا للذاكرة.
الإجراءات المخزنة تقوم بمعالجتها إما باستخدام Temp Hash Table مثل: tmpTable1 أو في الذاكرة باستخدام @ tmpTable1. اعتمادًا على ما تريد أن تخبره به.
يشبه الإجراء المُخزّن الوظيفة ، لكن يُطلق عليها مباشرة باسمها. بدلا من الوظائف التي تستخدم بالفعل داخل الاستعلام نفسه.
من الواضح أن معظم جداول الذاكرة تكون أسرع ، إذا كنت لا تسترجع الكثير من البيانات.