PDA

View Full Version : جستجوی پویا



پوریا_م
سه شنبه 30 فروردین 1390, 14:20 عصر
با سلام
من از کد زیر برای جستجوی دینامیک استفاده کردم.
CREATE PROCEDURE Person_Search
(
@fname NVARCHAR(50) = NULL ,
@lname NVARCHAR(50) = NULL,
@Mob1 NVARCHAR(50) = NULL,
@Mob2 NVARCHAR(50) = NULL,
@Mob3 NVARCHAR(50) = NULL,
@Tel1 NVARCHAR(50) = NULL,
@Tel2 NVARCHAR(50) = NULL,
@Tel3 NVARCHAR(50) = NULL,
@Tel4 NVARCHAR(50) = NULL,
@Tel5 NVARCHAR(50) = NULL,
@Tel6 NVARCHAR(50) = NULL,
@Tel7 NVARCHAR(50) = NULL
)
AS
SELECT Fname ,
Lname ,
Mob1 ,
Mob2 ,
Mob3 ,
Tel1 ,
Tel2 ,
Tel3 ,
Tel4 ,
Tel5 ,
Tel6 ,
Tel7
FROM TelList
WHERE Fname = COALESCE(@fname , Fname)
AND Lname = COALESCE(@lname, Lname)
AND Mob1 = COALESCE(@Mob1 , Mob1)
AND Mob2 = COALESCE(@Mob2 , Mob2)
AND Mob3 = COALESCE(@Mob3 , Mob3)
AND Tel1 = COALESCE(@Tel1 , Tel1)
AND Tel2 = COALESCE(@Tel2 , Tel2)
AND Tel3 = COALESCE(@Tel3 , Tel3)
AND Tel4 = COALESCE(@Tel4 , Tel4)
AND Tel5 = COALESCE(@Tel5 , Tel5)
AND Tel6 = COALESCE(@Tel6 , Tel6)
AND Tel7 = COALESCE(@Tel7 , Tel7)
GO

ولی با اجرای پروسیجر بدون پارامتر هیچ خروجی رو بر نمیگردونه!
exec Person_Search
علتش چی میتونه باشه ؟؟؟
با تشکر

oliya24
سه شنبه 30 فروردین 1390, 14:26 عصر
من که نفهمیدم با لا خره پویا یا دینامیک من همین الان داشتم روی یه کد که مربوط به جستجوی پویا بود کار میکردم کد رو از سایت www.30sharp.com (http://www.30sharp.com) گرفتم بد نیست یه نگاه بنداز امیدوارم مفید واقع شده باشه

حمیدرضاصادقیان
سه شنبه 30 فروردین 1390, 14:52 عصر
سلام.
خوب دوست عزیز چی باید برگردونه؟ وقتی همه مقادیر Null هستند؟
آیا در جدول رکوردی دارید که همه این ستونها مقدارش Null باشه؟

پوریا_م
سه شنبه 30 فروردین 1390, 15:01 عصر
من که نفهمیدم با لا خره پویا یا دینامیک پویا و دینامیک معنیشون یکی هست!
ضمنا این کد دقیقا همون روشی که آقای سلیم آبادی اونجا نوشتن.

وقتی همه مقادیر Null هستند؟
آیا در جدول رکوردی دارید که همه این ستونها مقدارش Null باشه؟ نه رکوردی ندارم که همه ستونهاش null باشند ولی استفاده از تابع COALESCE برای همینه که اگر کاربر مقداری برای متغیرها درنظر نگرفت مقادیر غیر تهی رو برگردونه. اشتباه میکنم جناب صادقیان ؟

حمیدرضاصادقیان
سه شنبه 30 فروردین 1390, 15:58 عصر
سلام. درسته من به COALESCE دقت نکرده بودم.ولی من حدسم اینه که در شرط Where آخرین مقداری که این تابع داره برای مقادیر مختلف برمیگردونه متفاوته و چون شما And گذاشتید نمیتونه مقداری پیدا کنه که همه شرایط موجود در ستونها باهم برابر باشه.
مثلا میتونید در شرط where فقط Fname,Lname رو داشته باشید و مابقی رو Comment کنید .اینجوری باید بهتون مقدار برگردونه.

محمد سلیم آبادی
سه شنبه 30 فروردین 1390, 18:00 عصر
احتمالا بعضی از مقادیر موجود در ستون های NULL هستند در نتیجه عبارت NULL = NULL نتیجه False خواهد داشت و از آنجایی که تمام نتایج با همدیگر AND شدند نتیجه کلی false خواهد بود و در نتیجه سطری بر نخواهد گشت. این مورد رو بررسی کنید.

پوریا_م
چهارشنبه 31 فروردین 1390, 08:50 صبح
احتمالا بعضی از مقادیر موجود در ستون های NULL هستند
حق با شماست جناب سلیم آبادی، مقادیر بعضی فیلدها Null هستند، برای استفاده از روش فوق و با توجه به نال بودن بعضی ستونها چه روشی رو پیشنهاد میکنید ؟؟؟
با تشکــــــــــــــر.

حمیدرضاصادقیان
چهارشنبه 31 فروردین 1390, 09:09 صبح
سلام.شما میتوانید با استفاده از isnull مقدار اونارو به یک مقدار یکسان تغییر بدید.

veronika
یک شنبه 01 خرداد 1390, 18:56 عصر
سلام
ببخشيد من هم همين مشكل را دارم منظورتون اينه كه در كدام قسمت از isnull استفاده بشه؟
ممنون