سلام
فرض کنید یک جدول داریم که دارای ستونهای 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)'
باتشکر
این پست در تاریخ {{ dateString(new Date(post.deleteDate)) }} توسط {{ post.deletedByUser }} حذف شده است.
دلیل حذف: {{ post.deleteReason ?? 'نامشخص' }}
زمان پاسخ گویی روز های شنبه الی چهارشنبه ساعت 9 الی 18
فقط به موضوعات مربوط به محصولات آموزشی و فروش پاسخ داده می شود