• Let me add to the conversation. Since the procedure's parameters (except for the first one) all have NULL assigned as a default doesn't mean that the parameter will be processed AS IF a null was explicitly passed in (like @Adult = NULL when calling the procedure).

    If you SPECIFY the input parameters explicitly as in Jason's example (@Adult = 1, @exclude = 0) it doesn't matter what order they are in. But you can call the procedure with JUST the values IF THEY ARE IN ORDER.

    EXEC dbo.Procedure_table 1, 2, 'A', 'b',...etc.

    The wrinkle here is that IF the parameters have NULL as the default you can drop them off from the end of the list. So for example, this would work because the values all have a NULL default:

    EXEC dbo.Procedure_table NULL,'downtown',1

    In such a case the NULLable parameters are just ignored starting from the end of the line. If you need to pick and choose other parameters out of order you will have to do so explicitly or provide values for all even if that value itself is a blank or null.

    Now you also present another interesting point you may have overlooked. The first parameter in the list is an OUTPUT parameter. An OUTPUT parameter is just the opposite of all the others. It defines a value that you will use to RECEIVE a value from the stored procedure's process which you can then use as a variable itself for some other process. Getting that value from the output parameter and making use of it is not difficult, but it isn't very obvious how to do that. Google 'using a stored procedure for output' and you'll surely find a tutorial on that topic.