SELECT *
FROM [dbo].[Persons]
WHERE
([IdNo] like '%'+isnull(@IdNo,[IdNo])+'%' or [IdNo] is NULL) AND
([FName] like '%'+isnull(@FName,[FName])+'%' or [FName] is NULL) AND
([LName] like '%'+isnull(@LName,[LName])+'%' or [LName] is NULL) AND
([Father] like '%'+isnull(@Father,[Father])+'%' or [Father] is NULL)
از این روش استفاده می کنم ولی در حالت کلی با Like خالی هم سرعتش زیاد تفاوتی نداره ولی مسئله ای که مد نظرم هست اینه که سرعت خیلی زیاد باشه چون این کوئری زمانی اجرا میشه که کاربر هر چهار مشخصه رو وارد کرده و می خواد از آخرین فیلد یعنی Idno خارج بشه(تو محیط برنامه #C) آن وقت برنامه کوئری رو اجرا میکنه تا موارد مشابه رو پیدا کنی و کاربر برای رفتن به فیلد بعدی چند ثانیه منتظر میشه که اغلب خوب نیست و این انتظار رو به پایه عدم کارایی برنامه میزاره