Я бы хотел согласиться с тем, что подход хранимых процедур предпочтительнее, чем построенный SQL в обоих приведенных выше примерах.
Хотя в данном случае это не страшно, вы отправляете полный запрос по сети,что не является предпочтительным.Кроме того, вы также можете защитить прямой доступ к самим таблицам, но предоставить доступ к SPROC, чтобы вы могли предоставить эту возможность перечисления определенным группам пользователей, не предоставляя им прямой доступ.
Я бы рекомендовал использовать оператор CASE вваша хранимая процедура, а не создание SQL.Это гарантирует, что вы поддерживаете только таблицы , о которых вам известно , и запрещает любое злоупотребление системой.