@csharpnoob

Как вы пишете SQL в своих проектах?

Доброго времени суток.

В своем проекте я решил использовать Dapper. Очень часто возникают ситуации, когда нужно менять SQL запрос в зависимости от каких-то переменных.
Например:
var sql = "SELECT field FROM table";
if(someModel.IncludeSomething){
   // добавить inner join something + добавить SELECT something.field
}

if(conditionN){...}


Использовать stringbuilder или конкатенацию строк очень неудобно и, как мне кажется, так мало кто делает.
  • Вопрос задан
  • 406 просмотров
Пригласить эксперта
Ответы на вопрос 4
@alejandro68
или конкатенацию строк очень неудобно и, как мне кажется, так мало кто делает.


Ну и напрасно.

Конкатенция и форматная строка - наше все.
Ответ написан
Комментировать
@d-stream
Готовые решения - не подаю, но...
Вообще stored procedures и во-первых не надо динамически генерить новые для sql сервера запросы с рисками ошибок и всяких дыр. А для процедур sql сервер хранит планы выполнения и прочие вкусности оптимизации.
Ответ написан
Комментировать
@DarkByte2015
Строковая интерполяция? Не, не слышал. Это один вариант. Еще когда я работал над одним крупным энтерпрайз проектом на ASP.NET MVC мы хранили запросы в ресурсных файлах проекта. А дальше там Visual Studio же очень удобно сама генерирует класс в котором эти строки из ресурсника хранятся, дергаешь их String.Format(MyResourse.MyQuery, var1, var2). Т.е. как в первом варианте, но чтобы SQL в C# коде не хранить. Ну и наконец конечно всегда можно заюзать хранимки и орм.
Ответ написан
Комментировать
x67
@x67
В питоне я просто провожу необходимые операции над строкой запроса. Полагаю, следует формировать структуру БД и запросы так, чтобы минимально в них влезать, при этом по возможности максимально разделяя функции, выполняемые в вашем ЯП и функции, выполняемые SQL сервером. Например, если что-то можно проверить прямо в запросе, можно сделать это в запросе, сгрузив уже результат.
Если запрос надо менять сильно, может лучше использовать два разных запроса, оптимизировав каждый под свою задачу?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы