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