View Full Version : Select Or View
مهدی هادیان2
شنبه 27 خرداد 1391, 12:14 عصر
بسم الله الرحمن الرحیم
با سلام
هنگامی که بخوام یه تعداد ستون رو از بانک بگیرم؛ دو راهکار دارم.
1) Select روی جدول هام بزنم و ...
2) یه View توی بانک ایجاد کنم و از اون استفاده کنم
هنگامی که بخواهیم در برنامه از View استفاده کنیم دوباره باید یه select روی اون بزنیم. (پس تا این جا یه Select غیر ضروری)
و از اون مهمتر اینکه در Viewنمیتونیم شرط بذاریم. پس باید همه سطرهای Viewرو بگیریم و تازه اونجا فیلترینگش کنیم.
با تمام این تفاسیر چرا سفارش به استفاده از Viewشده است.
با تشکر:لبخندساده:
tiphooo
دوشنبه 29 خرداد 1391, 01:44 صبح
کجا سفارش شده؟
مهدی هادیان2
دوشنبه 29 خرداد 1391, 04:46 صبح
کجا سفارش شده؟
با سلام
مگه قرار نیست دستورهای بانک تا حد امکان در بانک گذاشته شود و در لایه ی دیتا اکسس تنها از آنها استفاده کنیم. بنابراین اگه از View استفاده نکنم مجبورم دستورهای Select رو در کلاس های کنترلیم بگذارم.
Galawij
دوشنبه 29 خرداد 1391, 08:41 صبح
مگه قرار نیست دستورهای بانک تا حد امکان در بانک گذاشته شود و در لایه ی دیتا اکسس تنها از آنها استفاده کنیم. بنابراین اگه از View استفاده نکنم مجبورم دستورهای Select رو در کلاس های کنترلیم بگذارم.
سلام.
خوب در این صورت کاربرد SP ها کجاست؟!
مرتضی تقدمی
دوشنبه 29 خرداد 1391, 09:16 صبح
سلام
در View میشه شرط تعریف کرد.
مهدی هادیان2
دوشنبه 29 خرداد 1391, 12:36 عصر
سلام.
خوب در این صورت کاربرد SP ها کجاست؟!
با سلام
تا اون جایی که می دونم sp برای کارهای محاسباتی و دستوراتی مثل INSERT, DELETE, UPDATE,... طراحی شده است و VIEW برای ایجاد جدول های مجازی و...
مهدی هادیان2
دوشنبه 29 خرداد 1391, 12:37 عصر
سلام
در View میشه شرط تعریف کرد.
با سلام
لطفا بفرمائید چه جوری میشه شرط تعریف کرد.
با تشکر
مرتضی تقدمی
دوشنبه 29 خرداد 1391, 12:44 عصر
با سلام
لطفا بفرمائید چه جوری میشه شرط تعریف کرد.
با تشکر
سلام
این نمونه یک view:
create view Select_Forosh
as
SELECT P_Foroosh.Date, Tbl_Foroosh.f_gheymat_metr, Tbl_Moshtari.moshtari_name + N' ' + Tbl_Moshtari.moshtari_family AS name,
Tbl_Melk.melk_metraj_zamin, Tbl_Melk.melk_metraj_aparteman, Tbl_Melk.melk_tedad_vahed_kol, Tbl_Melk.melk_address,
Tbl_Moshtari.moshtari_type, Tbl_Foroosh.f_malek_id, Tbl_Foroosh.f_melk_id, P_Foroosh.Moshtari_id, P_Foroosh.P_Id,
P_Foroosh.f_Id
FROM P_Foroosh INNER JOIN
Tbl_Foroosh ON P_Foroosh.f_Id = Tbl_Foroosh.f_id INNER JOIN
Tbl_Melk ON Tbl_Foroosh.f_melk_id = Tbl_Melk.melk_id INNER JOIN
Tbl_Moshtari ON P_Foroosh.Moshtari_id = Tbl_Moshtari.moshtari_id AND Tbl_Foroosh.f_malek_id = Tbl_Moshtari.moshtari_id AND
Tbl_Melk.melk_id_malek = Tbl_Moshtari.moshtari_id
WHERE (P_Foroosh.P_Id = 1) AND (P_Foroosh.Moshtari_id = 1)
که خود این view دارای شرط است.
این هم یک select روی همین view که این هم دارای شرط است:
select name from Selest_Forosh
موفق باشید
مهدی هادیان2
دوشنبه 29 خرداد 1391, 15:16 عصر
سلام
این نمونه یک view:
create view Select_Forosh
as
SELECT P_Foroosh.Date, Tbl_Foroosh.f_gheymat_metr, Tbl_Moshtari.moshtari_name + N' ' + Tbl_Moshtari.moshtari_family AS name,
Tbl_Melk.melk_metraj_zamin, Tbl_Melk.melk_metraj_aparteman, Tbl_Melk.melk_tedad_vahed_kol, Tbl_Melk.melk_address,
Tbl_Moshtari.moshtari_type, Tbl_Foroosh.f_malek_id, Tbl_Foroosh.f_melk_id, P_Foroosh.Moshtari_id, P_Foroosh.P_Id,
P_Foroosh.f_Id
FROM P_Foroosh INNER JOIN
Tbl_Foroosh ON P_Foroosh.f_Id = Tbl_Foroosh.f_id INNER JOIN
Tbl_Melk ON Tbl_Foroosh.f_melk_id = Tbl_Melk.melk_id INNER JOIN
Tbl_Moshtari ON P_Foroosh.Moshtari_id = Tbl_Moshtari.moshtari_id AND Tbl_Foroosh.f_malek_id = Tbl_Moshtari.moshtari_id AND
Tbl_Melk.melk_id_malek = Tbl_Moshtari.moshtari_id
WHERE (P_Foroosh.P_Id = 1) AND (P_Foroosh.Moshtari_id = 1)
که خود این view دارای شرط است.
این هم یک select روی همین view که این هم دارای شرط است:
select name from Selest_Forosh
موفق باشید
با سلام
از کدی که گذاشتید ممنون
منظور من شرطی بود که به صورت پارامتر به VIEW پاس بدیم.
با تشکر فراوان
مرتضی تقدمی
دوشنبه 29 خرداد 1391, 15:25 عصر
view مثل یک جدول مجازیه. شما اگه می خواین با پارامتر کار کنین, کدهای توی view رو در یک sp قرار بدین و بعد با پارامترهای ارسالی به sp کار کنید.
مهدی هادیان2
دوشنبه 29 خرداد 1391, 15:50 عصر
با سلام خدمت همه دوستان
فکر می کنم بهترین حالت برای VIEW هایی که دارای شرط باشند همون باشه که از FUNCTION استفاده کنیم
قسمت اول سوالم می مونه که برای این منظور مجبور به زدن 2بار SELECT هستیم. یک بار خود SELECTی که می خواهیم اطلاعات رو بکشیم بیرون و دیگری SELECTی که روی FUNCTION مورد نظر میزنیم. این مسئله رو چه جوری میشه حل کرد. و اصلا به نظر شما مقرون به صرفه ست؟
با تشکر:لبخندساده:
Galawij
سه شنبه 30 خرداد 1391, 10:40 صبح
فکر می کنم بهترین حالت برای VIEW هایی که دارای شرط باشند همون باشه که از FUNCTION استفاده کنیم
قسمت اول سوالم می مونه که برای این منظور مجبور به زدن 2بار SELECT هستیم. یک بار خود SELECTی که می خواهیم اطلاعات رو بکشیم بیرون و دیگری SELECTی که روی FUNCTION مورد نظر میزنیم. این مسئله رو چه جوری میشه حل کرد. و اصلا به نظر شما مقرون به صرفه ست؟
آخه دوست عزیز چرا تابع؟؟!!
سرعت SP ها خیلی بیشتر از تابع هست! تابع را بیشتر برای موارد محاسباتی و فرمولی که بارها استفاده می شه، می نویسند که در داخل SP ها و View ها فراخوانی می شه!
شما SP ها را برای هر موردی که لازم داری استفاده کن، لازم نیست برای هر SELECT ای هم به تابع فکر کنی!!
مهدی هادیان2
سه شنبه 30 خرداد 1391, 18:05 عصر
آخه دوست عزیز چرا تابع؟؟!!
سرعت SP ها خیلی بیشتر از تابع هست! تابع را بیشتر برای موارد محاسباتی و فرمولی که بارها استفاده می شه، می نویسند که در داخل SP ها و View ها فراخوانی می شه!
شما SP ها را برای هر موردی که لازم داری استفاده کن، لازم نیست برای هر SELECT ای هم به تابع فکر کنی!!
با سلام
ممنون از توجهتون
فرموده بودید سرعت SPها بیشتر از تابع هست؛ این حرفتون رو قبول دارم ولی مایکروسافت از اینکه table valued function ها رو طراحی کرده حتما هدفی داشته.
لطفا به لینک های زیر یه نگاهی بیندازید و نظرتون رو بفرمائید
http://stackoverflow.com/questions/1942753/performance-difference-between-user-defined-function-and-stored-procedures
http://www.dotnetspider.com/resources/18920-Difference-between-Stored-Procedure-Functions.aspx
http://www.go4expert.com/forums/showthread.php?t=329
http://www.sqlservercentral.com/Forums/Topic416974-8-1.aspx
با تشکر
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.