To do this using a stored procedure and avoiding dynamic SQL, I recommend your parameters have default NULL values
For example:
@SchoolName varchar(50) = NULL
If the user does not choose a school name, then don't pass it in.
In the SELECT statement, do your joins:
SELECT S.*, SPC.*
FROM SCHOOL S
INNER JOIN SCHOOL_PROGRAM_COURSE SPC ON S.SchoolID = SPC.SchoolID
INNER JOIN PROGRAM P ON P.ProgramID = P.ProgramID
...
And the magic happens in the WHERE clause:
WHERE (@SchoolName IS NULL OR S.SchoolName = @SchoolName)
AND (@(other parameter) IS NULL OR ...)
Hope that helps.