What we do is create the where statement by building it dynamically in the procedure based on the values of the parameters. Then we concatenate the where clause with the select part of the statement and execute. This gives the flexibility to do more complex types of where clauses. I have one search with 29 possible input variables (soon to be 30 , oh joy!) and depending on what the variable is I might be creating a simple where or a between or a contains and some paramters in combination use the OR operator ands ome use the and operator. So I can search for the public airports in colorado which are at an elevation between 100 and 3000 feet which have either flight schools or aircraft rentals. I suspect this would be impossible with the approach given above. Some snippets of code to give you the idea (the whole thing is way too long to post here):
If @LandMilitary = 'True'
Begin
Set @AirUseINOwn = ' OwnershipType IN("MA","MN","MR"

'
If @SQLWhere <> ''
Set @SQLWhere = @SQLWhere + ' and ' +@AirUseINOwn
else
Set @SQLWhere = @AirUseINOwn
End
If @AirState <>''
begin
If @SQLWhere <> ''
Set @SQLWhere =@SQLWhere+ ' and State = "' +@AirState+'"'
else
Set @SQLWhere = 'State = "' +@AirState+'"'
end
If @SQLWhere <> ''
Set @SQLWhere = 'Where ' + @SQLWhere
Set QUOTED_IDENTIFIER OFF
exec("Select AirportName, AirportID,City , State, AirportType, FacilityUse, Country from #Result " +@SQLWhere)