PDA

View Full Version : استفاده stored procedure همانند View



صادق صدقی
یک شنبه 25 تیر 1391, 15:44 عصر
سلام
دوستان من یک ویوو دارم که بعد از یک سال خیلی سنگین شده

دیتا ها بسیار زیاد و جوین ها و جداولم زیاد!

می خوام اینو Stored Procedure کنم

فقط مشکلی که هست من توی where clause هفت تا فیلد برای مقایسه دارم

که ممکنه از این 7 تا 3 تاش مقدار گرفته شده باشه
می خوام فقط همین 3 تا پارامتری که Null نیستن توی Where مقایسه شن

به نظرتون باید چیکار کنم؟
Viewخوبی ای که داره برای Where محدودیتی نداری
اما خوب سرعت رو بسیار کند می کنه

آیا میشه توی اس پی بعد از Where شرط مقایسه گذاشت؟
مثلا
select * from table where
if @id is not null begin id=@id else 1=1 end
and
if @fname is not null begin
Firstname like@ fname
end
و......

وای دارم دیوونه میشم
یکی کمکم کنه
توی سایت stackoverFlow یک تاپیک بود با همین موضوع این هم لینکش (http://stackoverflow.com/questions/87821/sql-if-clause-within-where-clause)

ممنون میشم راهنماییم کنید

Galawij
یک شنبه 25 تیر 1391, 21:02 عصر
سلام،
کامل سوال شما رو نگرفتم، ولی فکر کنم این روش بتونه بهتون کمک کنه:
شما می تونید داخل SP همه شرطها را لحاظ کنید ولی بسته به انتخاب کاربر شرطتتون عمل کنه.
مثلا به همه پارامترهای ورودی مقدار اولیه صفر بدید بعد قسمت Where روال هم به این صورت درمیاد:
WHERE ((@IdContract=0)OR(dbo.TbContract.IdContract=@IdCo ntract))
And
((@UserId='00000000-0000-0000-0000-000000000000')OR(dbo.aspnet_Users.UserId=Convert(u niqueidentifier,@UserId)))
این حالت خیلی انعطاف پذیره و کاربردی مخصوصا برای گزارشات برنامه.

حمیدرضاصادقیان
دوشنبه 26 تیر 1391, 09:34 صبح
سلام.
شما هرکدی که توی View نوشتید در SP هم به شما جواب میده. به جز این در مورد شما تفاوت آنچنانی در سرعت شما نمیکنه فقط با تغییر View به SP.
جداول مربوطه چندتارکورد دارند؟ اگر میتونید Plan مربوط به View رو اینجا قرار بدید تابررسی کنیم.

lastmory
دوشنبه 26 تیر 1391, 22:31 عصر
سلام
توی Where به جای if از case استفاده کن

pashna
سه شنبه 27 تیر 1391, 09:00 صبح
منم با آقای صادقیان موافقم، فکر نمیکنم خیلی‌ تاثیر بذاره، شاید اگر از "SCHEMA BINDING" استفاده کنی‌ ۱ کم بهتره بشه.