PDA

View Full Version : مشکل نتایج نادرست پراسیجر



hmahdavi921
چهارشنبه 06 اسفند 1393, 15:10 عصر
سلام
دوستان من یک وب سایت درست کردم با asp.net.بعد از ساخت به خاطر اینکه استفاده از پراسیجر سربار کمی داره تو کدهام از پراسیجر استفاده کردم .من چند تا جدول دارم که فیلدها شون دقیقا مثل همه .برای جستجو ی کالاها تو جداول از پراسیجر استفاده کردم حالا این پراسیجر تو یک جدول به درستی کار میکنه اما در یک جدول دیگه نه .پراسیجرم اینه

ALTER PROCEDURE [dbo].[lavazem_electronic_A]
@name_product nvarchar(50),
@first_price int=0,
@final_price int,
@collection_1 nvarchar(30),
@id_state tinyint,
@startrow int,
@endrow int

AS
BEGIN

if(@final_price=0)set @final_price=null
if(@collection_1='انتخاب کنید') set @collection_1=null
if(@id_state=0)set @id_state=null


SELECT IDproduct,name_product,first_price,final_price,max _registered_price,final_date_view_shamsi,
count_views,image_1 from
(SELECT IDproduct,name_product,first_price,final_price,max _registered_price,final_date_view_shamsi,
count_views,image_1,ROW_NUMBER() OVER (order by first_price) AS RowNumber from
dbo.Table_lavazem_electronic where active= 0 and (name_product like '%' + isnull ( @name_product , name_product ) + '%' )
AND (first_price BETWEEN @first_price AND ISNULL(@final_price, final_price))
and (collection_1 = isnull ( @collection_1 , collection_1 ) )
and id_state = isnull ( @id_state , id_state )
and final_date_view_miladi>getdate() ) as Messages where RowNumber BETWEEN @startrow AND @endrow
end
(برای جستجو میتونم از 4 پارامتر استفاده کنم که نام اجباریه اما بقیه فیلد ها اختیاری هستند)در این پراسیجر من برای جستجوی کالاها حتما باید از فیلد collection_1 استفاده کنم تا جواب بده در غیر این صورت درست کار نمیکنه(غیر منطقیه) البته فقط در این جدول این طوریه در بقیه جدولها درست کار میکنه .من هر چه قدر مقادیر جدول و خود کوئری رو تغییر دادم به نتیجه نرسیرم .خوب به نظرم این عملکرد واقعا غیر منطقیه اما خوب کامپیوتره حتما علتی داره اما چی نمیدونم .دوستان کسی با چنین موردی برخورد داشته ؟لطفا راهنمایی کنید

ham3d1988
چهارشنبه 06 اسفند 1393, 15:48 عصر
وقتی collection_1 رو انتخاب نکنی پراسیجر خطا میده چون شرط شما اونو NULL نمیکنه
یه N اضافه کنید بهش

if(@collection_1=N'انتخاب کنید') set @collection_1=null

hmahdavi921
پنج شنبه 07 اسفند 1393, 08:37 صبح
ممنون حل شد