Как правило, вместо построения и выполнения строки, которая может
подвергаться атакам SQL-инъекций, я бы предложил создать строку
с параметрами и использованием sp_executesql для его выполнения, обеспечивая
параметры. Это больше работы, но это более безопасно, И это больше
вероятно, улучшится повторное использование плана.
Нет, запрос является длинной частью выполнения. Строим несколько
струны довольно безболезненно.
С точки зрения сводных столбцов, нет, это дополнительный проход. Вместо этого я бы
выполнить объединение против суб-выбора (обычно, иногда нарушая его
ступеньки могут работать лучше).
Неа. Смотри выше. sp_executesql лучше.
Да, спланируйте это как одно утверждение выбора. Временная таблица просто
удержание для агрегации, которая может быть сделана как производная таблица.
Оптимизация? Более жесткий вопрос. Просто видя что у тебя есть, КОНВЕРТ
заявление на e.EnquiryDate будет вызывать сканирование, несмотря ни на что.
Если это столбец datetime, вам нужно сравнить его с datetime
значение, без конверсий. Кроме того, я не мог сказать, не видя
целые запросы, планы выполнения, данные, структура, все это.
Как правило, эти запросы всех типов очень проблематичны.
Вместо этого определите общие шаблоны, которые будут
неизбежно существуют, эти три столбца всегда входят, только этот
приходит, когда приходит другой и т. д., а затем строит три или четыре
разные проки, которые принимают во внимание эти паттерны и используют
это как процедура-обертка, чтобы определить, какой из этих процедур он должен идти
к. Это будет работа по настройке, но не более того, и это будет
работать лучше и будет проще в обслуживании.