Это сильно зависит от того, что вы делаете в хранимых процессах. Однако рекомендуется использовать транзакции, если вы выполняете несколько операций вставки / обновления или удаления в одном процессе. Таким образом, если одна часть выходит из строя, другие части откатываются, оставляя вашу базу данных в согласованном состоянии.
Две наиболее важные вещи, которые следует учитывать при записи в базу данных (и, следовательно, при использовании хранимого процесса, выполняющего действие, отличное от select), - это целостность данных и производительность. Без целостности данных у вас просто есть база данных, которая содержит мусор и бесполезна. Без производительности у вас не будет пользователей (если они являются внешними клиентами) или недовольных пользователей (если им поручено использовать ваш продукт, обычно это внутренние пользователи, у которых нет другого выбора). Ни один из них не подходит для вашей карьеры. Поэтому при написании хранимого процесса убедитесь, что сначала вы убедитесь, что данные будут правильно введены в базу данных и что они потерпят неудачу, если в одной части действия возникнет проблема.
Если необходимо, запишите чеки в proc, чтобы убедиться, что ваш конечный результат будет правильным. Я специалист по ETL, и я всегда пишу свои проки, чтобы очистить и нормализовать данные, прежде чем пытаться импортировать их в свои таблицы. Если вы делаете что-то из пользовательского интерфейса, это может быть не так важно, чтобы делать в proc, хотя я хотел бы, чтобы пользовательский интерфейс выполнял проверки еще до запуска proc, чтобы убедиться, что данные хороши для вставки (такие вещи, как проверка, чтобы убедиться, что поле даты содержит реальную дату, все поля которой имеют значения и т. д.)
Если вы пишете процедуры для размещения больших объемов данных в таблицах, лучше всего иметь способ проверить эти результаты, прежде чем они будут завершены. Вы будете поражены тем мусором, который вы получите от клиентов и поставщиков для импорта данных. Мы пишем все наши импортные процедуры с флагом теста. Таким образом, вы можете возвращать выбранные данные, а не выполнять какое-либо действие, чтобы заранее видеть, на что именно вы будете влиять.
Я не фанат динамического SQL и предпочитаю не использовать его в хранимых процессах. Если вы застряли с динамическим SQl в существующих процессах, пожалуйста, установите флаг отладки, который позволит вам печатать SQL, а не выполнять его. Затем укажите в комментариях наиболее типичные случаи, которые вам понадобятся для запуска. Если вы сделаете это, вы обнаружите, что можете поддерживать процесс намного лучше.
Не делайте вещи в курсоре, просто потому, что вы хотите повторно использовать другой сохраненный процесс, который одновременно работает только с одной записью. Повторное использование кода, которое вызывает проблемы с производительностью, если плохо.
Если вы используете операторы case или if, убедитесь, что вы выполнили тестирование, которое затронет каждую возможную ветвь. Тот, который вы не тестируете, тот, который потерпит неудачу.