Это похоже на большинство функций dbms: если вы используете его в правильной ситуации, он хорошо работает, в неправильной - плохо.
Плюсы: некоторые вещи просто невозможно сделать без этого. Обычно я обнаружил, что это только для административной работы, а не для кода приложения. Некоторые системные команды не позволяют использовать параметры в качестве входных данных. Так, например, если мне нужно выполнить что-то через sproc для каждой базы данных, во многих случаях с неизвестными базами данных, и команда не принимает параметры, я обычно решаю это с помощью динамического SQL. Однако в Sybase ASE это больше, чем MSSQL.
Минусы: я не буду вдаваться в подробности, так как я думаю, что мы все уже знаем это, но может быть некоторый риск для внедрения SQL, если он используется неправильно. Для меня более важным является то, что запрос будет обрабатываться так, как он есть, уникальный запрос adhoc, а не часть плана скомпилированного запроса. Для чего-то, что иногда работает, ничего страшного. Для чего-то, что выполняется сотни раз в минуту и будет иметь много уникальных sql, это сгенерирует много новых, потенциально ненужных, планов запросов с истощением циклов и сокращением допустимого времени кэша плана.