Я бы установил каждый параметр как необязательный (значение по умолчанию равно нулю)
, а затем обработать его в ГДЕ ....
FirstName=ISNULL(@FirstName,FirstName)
AND
LastName=ISNULL(@LastName,LastName)
AND
SemesterID=ISNULL(@SemesterID,SemesterID)
Это будет обрабатывать только имя, только фамилию, все три и т. Д. И т. Д.
Это также намного более красиво / управляемо / надежно, чем динамическое построение строки SQL и ее выполнение.