У меня было горячее обсуждение с коллегой по использованию хранимых процедур (SP) в приложении .NET
(в базе данных SQL Server 2005). [У него есть фон Microsoft и я Java, что может быть или не быть релевантным].Сохраненная процедура для всего
Мне нужно вставить данные, записанные в пользовательском интерфейсе. Для этого я бы написал SP и использовал это в коде .NET
? Это не требуется, но каковы плюсы и минусы использования SP?
Другой сценарий:
я поддерживаю список городов. Пользователь может добавлять города с помощью пользовательского интерфейса. Как вы ожидаете, пользователь не может войти в дублирующий город. При повторной записи произойдет ошибка. это может быть реализовано несколькими способами:
- В моем коде выполните запрос выбора, чтобы проверить, существует ли он, а затем, если не вставить город, в противном случае это ошибка в пользовательском интерфейсе.
- Вставьте непосредственно и из-за уникального индекса
SQLException
будет пойман. Взгляните на SQLException, чтобы проверить, какой уникальный индекс нарушен, и показать соответствующую ошибку. - создать один SP и в том, что справиться с выше логики, то есть проверка дубликатов и бросать ошибку или вставить
Какой это правильный путь? (ссылки на хорошие ресурсы приветствуются).
Ваша точка № 3 не совсем правильная, любая заявка sql, которую вы запускаете, либо написана в .net-коде, либо использует sp, будет кэшироваться и оптимизироваться при следующем запуске, sps ничем не отличаются от raw sql в этой связи. Параметризация дает вам безопасность и уменьшает размер вызываемого вызова. –
Если вы отправляете «SELECT * FROM MyTable WHERE Field =« A »», а затем отправляете «SELECT * FROM MyTable WHERE Field =« B »», то в итоге вы получаете 2 отдельных плана выполнения в кеше, а не 1. Это только если вы отправляете в тот же самый adhoc raw SQL min этот случай, что он будет повторно использовать план выполнения, следовательно, параметризация является ключевой, например SELECT * FROM MyTable WHER Поле = @ Значение, которое будет выполняться так же, как и sproc, как любое значение, которое вы назначаете @Value, приведет к тому, что ТАЙНЫЙ план выполнения будет использоваться. – AdaTheDev
Если вы пишете adhoc Queries, они будут кэшироваться для ТОЧНОГО запроса, как говорит AdaTheDev.Вот почему использование sprocs лучше, потому что вся вещь кэшируется, и значения могут быть легко изменены. – AutomatedTester