مشکل در دانیامیک کوئری

ساخت وبلاگ

سلام
فرض کنید یک جدول داریم که دارای ستونهای Sender وReceiver دارای 1000نفر متفاوت می باشند
و sp زیر را نوشته ام

ALTER Procedure [dbo].[S_test_Search] @Number nvarchar(50) 
,@Sender nvarchar(100)
,@Receiver nvarchar(100)
,@Comment nvarchar(max)
,@ActionID nvarchar(100)
,@TranscriptID nvarchar(100)
,@UrgencyID nvarchar(100)
AS
Set NoCount ON
Declare @SQLQuery AS NVarchar(4000)
Declare @ParamDefinition AS NVarchar(2000)
Set @SQLQuery = '
select
*
from test
where (1=1)
'
If @Number <> ''
Set @SQLQuery = @SQLQuery + ' And (Number like' + '''%''' + '+ Number +' + '''%''' + ')'
If @Sender <> ''
Set @SQLQuery = @SQLQuery + ' And (Sender = @Sender)'
If @Receiver <> ''
Set @SQLQuery = @SQLQuery + ' And (Receiver = @Receiver)'
If @Comment <> ''
Set @SQLQuery = @SQLQuery + ' And (Comment like' + '''%''' + '+ @Comment +' + '''%'''+ ')'
If @ActionID is not null
Set @SQLQuery = @SQLQuery + ' And (Type = @ActionID)'
If @TranscriptID is not null
Set @SQLQuery = @SQLQuery + ' And (cm.TranscriptID = @TranscriptID)'
If @UrgencyID is not null
Set @SQLQuery = @SQLQuery + ' And (cm.UrgencyID = @UrgencyID)'

Set @ParamDefinition =
' @Number nvarchar(50)
,@Sender nvarchar(50)
,@Receiver nvarchar(50)
,@Comment nvarchar(max)
,@ctionID nvarchar(100)
,@TranscriptID nvarchar(100)
,@UrgencyID nvarchar(100)

Execute sp_Executesql @SQLQuery
,@ParamDefinition
,@Number
,@Sender
,@Receiver
,@Comment
,@ActionID
,@TranscriptID
,@UrgencyID

If @@ERROR <> 0 GoTo ErrorHandler
Set NoCount OFF
Return(0)

ErrorHandler:
Return(@@ERROR)


اما هنگام اجرا وقتی Sender وReceiver را با داده های مورد نظر پر میکنیم(هیچگاه nullنمی باشند)اما بازهم اطلاعات1000نفر مورد نظر را برمیگرداند نه اطلاعات اشخاصی که وارد شده اند
چگونه باید کد را اصلاح کنم که فقط اطلاعاتی نفرات مورد نظر را برگرداند نه همه را

If @Sender <> ''
Set @SQLQuery = @SQLQuery + ' And (Sender = @Sender)'
If @Receiver <> ''
Set @SQLQuery = @SQLQuery + ' And (Receiver = @Receiver)'

باتشکر

برنامه نویس...
ما را در سایت برنامه نویس دنبال می کنید

برچسب : نویسنده : محمد رضا جوادیان programers بازدید : 190 تاريخ : شنبه 27 شهريور 1395 ساعت: 0:07