Це як у більшості функцій dbms, якщо ви користуєтесь ним у правильній ситуації, це добре справляється, неправильна ситуація - це погано.
Плюси: деякі речі просто не обійтися без цього. Зазвичай я вважаю, що це стосується лише адміністративної роботи, а не коду програми. Деякі системні команди не дозволяють використовувати параметри як вхідні дані. Так, наприклад, якщо мені потрібно запустити щось через відросток проти кожної бази даних, у багатьох випадках з невідомими базами даних, і команда не приймає параметри, я зазвичай вирішую це через динамічний SQL. Однак це більше у Sybase ASE, ніж у MSSQL.
Мінуси: Я не буду надто багато в цьому займатися, оскільки, думаю, ми всі це вже знаємо, але може бути певний ризик введення SQL, якщо він використовується неправильно. Більш великий для мене полягає в тому, що запит буде розглядатися як такий, який він є, унікальний запит adhoc, а не частина складеного плану запитів. Щось те, що спрацьовує зрідка, не має нічого особливого. Що-небудь, що виконується сотні разів на хвилину, і це матиме багато унікальних sql, це створило б багато нових, потенційно непотрібних планів запитів, з'їдання циклів, і скорочення дійсного часу кешу плану.