Тяжелые выборки — в хранимых процедурах (MSSQL), а для вещей попроще — хороший QueryBuilder с оберткой для db драйвера. Чистый SQL в коде я давно уже не видел. Правильное форматирования запроса, параметры, соединения и прочее должны перекладываться на плечи других библиотек. И ещё, хороший QueryBuilder создает дополнительный уровень абстракции между запросом и драйвером базы, таким образом мы от него отвязываемся, и поэтому возможно будет даже другую базу использовать, например SQLite вместо mssql