То, что я хотел бы предложить сделать, - это создать функцию, которая будет принимать список makeIds, colorIds и т. Д. С разделителями. Вероятно, это будет int (или любой другой ключ).И разбивает их на таблицы для вас.
Ваш ИП примет список марок, цветов и т. Д., Как вы сказали выше.
YourSP '1,4,7,11', '1,6,7', '6'
....
Внутри вашего SP вы вызовете функцию разделения, которая будет возвращать таблицу -
SELECT * FROM
Cars C
JOIN YourFunction(@models) YF ON YF.Id = C.ModelId
JOIN YourFunction(@colors) YF2 ON YF2.Id = C.ColorId
Затем, если они ничего не выберут, они ничего не получат.Если они выберут все, они получат все.