0
مشکل در دانیامیک کوئری
سلام
فرض کنید یک جدول داریم که دارای ستونهای 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)'
باتشکر
2 پاسخ
0
با سلام
شرط هایی که با like چک شده اند را comment کنید و مجدد تست کنید .
1
سلام
لطفا 4 پارامتر ابتدایی کدتون رو هم از این فرم (<>)به این صورت اصلاح کنید.
IS NOT NULL
و قسمت مربوط به Sender ,Reciver رو به این صورت تغییر بدید.
select @SQLQuery = @SQLQuery + ' And Sender LIKE N'+''''+@Sender+'%'+''''
select @SQLQuery = @SQLQuery + ' And Sender LIKE N'+''''+@Reciver+'%'+''''